这是代码(我给出了代码的一部分) 以下代码是储蓄账户取款的代码:-
我已声明变量如下:-
protected static double balance;
protected static float amount;
所以我开设了账户,余额为7095,然后我正在执行提款操作,输入金额为100.0。我得到的结果如下,这是错误的。如果我输入金额为 100,就会得到预期的结果。需要帮助。
Total balance:- 7095
Withdraw amount:- 48
Current balance:- 7047
BigDecimal amount3 = new BigDecimal(balance);
BigDecimal amount4 = new BigDecimal(amount) ;
System.out.println("Total balance" +amount3);
System.out.println("Withdraw amount" + amount4);
Object obj = new Object();
obj = (amount3.subtract(amount4));
System.out.println("Current balance" +obj);
最佳答案
二进制 float (Java 中的 float
和 double
)只能表示与使用 10 进制的人类相反的直觉形式的小数。例如,众所周知,数字 0.1 无法用二进制浮点表示。
二进制浮点的问题不是加法和减法。问题是您感兴趣的(某些)小数的表示,特别是十进制数。因此,转换为 BigDecimal
没有帮助。已经以二进制 float 表示的数字。在选择将它们表示为float
时,它们就已经被近似了。和double
。按照您想要的精确计算不会消除当时产生的表示错误。
如果您关心精确表示十进制数字,请不要使用二进制浮点来存储它们。换句话说,不要声明 amount
和balance
具有二进制浮点类型 float
和double
.
关于java - 在JAVA中,可以使用大数小数来进行 float 和 double 的减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856743/