我的程序收到的金额为string
,然后使用Double
将其转换为Double.parseDouble(transAmt)
。
现在,当传递的金额为"100.00"
时,我们会遇到问题。
请告知是否会丢失精简数字的双精度数字
答案 0 :(得分:1)
通过猜测"问题"可能是:Java中的double
是数学实数的近似值。因此,100
和100.00
之间没有区别,它只是相同的值。
答案 1 :(得分:0)
double
不保持精度,是近似值,是(负)幂的总和2.因此,3.10可能在输出上为3.0999999785,这是一个在求和或乘法时放大的误差。
为了保持精确和准确 - 与财务软件一样 - 使用BigDecimal。
BigDecimal amount = new BigDecimal("12.99"); // A precision of 2 digits.
BigDecimal base = new BigDecimal("4.33");
assert base.multiply(BigDecimal.valueOf(3)).compareTo(amount) == 0;
不幸的是,BigDecimal正常的数学运算符不可用,但一般情况下它并不像double那样不安全。