【发布时间】:2020-04-05 21:28:29
【问题描述】:
在使用双精度表示价格的 Java 代码中,将双精度转换为价格刻度为 8 的长整数的最佳方法是什么?例如,{Double} 17.99 将转换为 {Long} 1799000000。双精度可能包含 2 到 4 位小数。
如下所示的简单代码有时可以正常工作:
Double dprice = 17.99;
Long lprice = (long) (dprice * 100000000);
但是,由于已知原因 (floating point guide),它可能会产生意想不到的结果。例如,在一次测试中,{Double} 17.99 转换为 {Long} 1798999999。
Java 中安全地进行这种转换的最佳选择是什么?在这种情况下是否需要 BigDecimal?
【问题讨论】:
-
"在这种情况下是否需要 BigDecimal?"将“双倍”价格存储为
BigDecimal是必要的。当你得到Double dprice = 17.99;时,你已经失去了精确度。 -
感谢您的信息。在这种情况下,BigDecimal 似乎确实是必要的。我认为可能还有其他一些选项,例如 Math.round。