在JAVA中,可以使用大小数减去浮点数和双数

时间:2018-04-16 11:55:46

标签: java floating-point double bigdecimal

这是代码(我给出了一小部分代码) 以下代码是撤销储蓄账户: -

我已将变量声明如下: -

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);

1 个答案:

答案 0 :(得分:4)

二进制浮点(Java中的floatdouble)只能表示与使用人类的基础10相反的形式的小数。例如,数字0.1在二进制浮点中是不可表示的。

二进制浮点的问题是加法和减法。问题是您感兴趣的(某些)分数的表示,特别是十进制数。因此,转换为已在二进制浮点表示的BigDecimal数字将无济于事。它们已被选中以表示为floatdouble时已经近似。根据您的需要精确计算,不会删除当时的表示错误

如果您想完全表示十进制数,请不要使用二进制浮点来存储它们。换句话说,请勿使用二进制浮点类型amountbalance声明floatdouble