发行时发行量增加了两倍



我的程序将金额值作为string接收,然后使用Double.parseDouble(transAmt)将其转换为Double

现在,当通过金额为 "100.00"时,我们正在遇到问题。

请告知是否会丢失双重零精度数字

有些猜测"问题"可能是什么:java中的 double是数学实数的近似值。因此,100100.00之间没有区别。

double毫无精确,是一个近似值,(负)幂的总和为2。因此,输出可能为3.09999999785,这是一个在求和或乘以时放大的错误。p>使用精确和精确的精确 - 与财务软件一样 - 使用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那样不安全。

最新更新