这是代码(我给出了一小部分代码) 以下代码是撤销储蓄账户: -
我已将变量声明如下: -
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);
答案 0 :(得分:4)
二进制浮点(Java中的float
和double
)只能表示与使用人类的基础10相反的形式的小数。例如,数字0.1在二进制浮点中是不可表示的。
二进制浮点的问题是不加法和减法。问题是您感兴趣的(某些)分数的表示,特别是十进制数。因此,转换为已在二进制浮点表示的BigDecimal
数字将无济于事。它们已被选中以表示为float
和double
时已经近似。根据您的需要精确计算,不会删除当时的表示错误。
如果您想完全表示十进制数,请不要使用二进制浮点来存储它们。换句话说,请勿使用二进制浮点类型amount
和balance
声明float
和double
。