英文:
Why should I compare the balance with BigDecimal.ONE before a transaction in Java?
问题
我正在查看有关从一个账户向另一个账户进行财务交易的教程,在将金额从一个账户转移到另一个账户之前,他们进行了这两个比较:
fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE) == 1
        && fromAccount.getCurrentBalance().compareTo(amount) == 1
我理解他们进行第二次比较是为了将余额与金额进行比较,但我不理解为什么他们要将余额与BigDecimal.ONE进行比较。有人可以解释一下吗?
我不明白这个比较是用来做什么的:
fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE)
这是代码:
if(fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE) == 1
        && fromAccount.getCurrentBalance().compareTo(amount) == 1
){
    fromAccount.setCurrentBalance(fromAccount.getCurrentBalance().subtract(amount));
    accountRepository.save(fromAccount);
    toAccount.setCurrentBalance(toAccount.getCurrentBalance().add(amount));
    accountRepository.save(toAccount);
    Transaction transaction = transactionRepository.save(new Transaction(0L, fromAccountNumber, amount, new Timestamp(System.currentTimeMillis())));
    return transaction;
}
return null;
英文:
I'm looking at a tutorial about a financial transaction from an account to another and before transfering the amount from an account to another they do these 2 comparations:
fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE) == 1
                && fromAccount.getCurrentBalance().compareTo(amount) == 1
I understand that they do the second comparation to compare the balance with the amount, but what I don't understand is why they compare the balance with BigDecimal.ONE. Can somebody explain?
I don't understand for what is this comparation:
fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE)
This is the code:
if(fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE) == 1
        && fromAccount.getCurrentBalance().compareTo(amount) == 1
){
    fromAccount.setCurrentBalance(fromAccount.getCurrentBalance().subtract(amount));
    accountRepository.save(fromAccount);
    toAccount.setCurrentBalance(toAccount.getCurrentBalance().add(amount));
    accountRepository.save(toAccount);
    Transaction transaction = transactionRepository.save(new Transaction(0L,fromAccountNumber,amount,new Timestamp(System.currentTimeMillis())));
    return transaction;
}
return null;
答案1
得分: 1
这只是一个在Java中用于比较大于的BigDecimal条件签名。如果您的CurrentBalance变量数据类型为BigDecimal,那么您不能使用普通的整数条件签名,如==、>或<。BigDecimal的compareTo()方法返回值以确定等于、大于和小于操作。
BigDecimal的CompareTo()方法返回:
0:如果此BigDecimal的值等于作为参数传递的BigDecimal对象的值。
1:如果此BigDecimal的值大于作为参数传递的BigDecimal对象的值。
-1:如果此BigDecimal的值小于作为参数传递的BigDecimal对象的值。
如果我们考虑这一行:
fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE) == 1
这一行在整数数据类型中可以简单地表示为:
if(fromAccount.getCurrentBalance() > 1)
如果我将您的两个条件转换为普通的整数数据类型操作,那么它会变成这样:
if(fromAccount.getCurrentBalance() > 1 && fromAccount.getCurrentBalance() > amount)
访问此处了解BigDecimal的compareTo()操作。链接
英文:
This is just a BigDecimal greater than conditional signature in java. if your CurrentBalance variable datatype is BigDecimal then you can't use the normal integer conditional signature like == or > or <. BigDecimal compareTo() method returns values to determine the equal, greater than and less than operations.
Big Decimal CompareTo() method returns
0 : if value of this BigDecimal is equal to that of BigDecimal object passed as parameter.
1 : if value of this BigDecimal is greater than that of BigDecimal object passed as parameter.
-1 : if value of this BigDecimal is less than that of BigDecimal object passed as parameter.
If we consider this line
fromAccount.getCurrentBalance().compareTo(BigDecimal.ONE) == 1
this line can simply means in an integer datatype
if(fromAccount.getCurrentBalance() > 1)
If I convert both of your conditions in a normal integer datatype operation then it will looks like this.
if(fromAccount.getCurrentBalance() > 1 && fromAccount.getCurrentBalance() > amount)
visit here to understand BigDecimal compareTo() operation.<br/>
https://www.geeksforgeeks.org/bigdecimal-compareto-function-in-java/
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论