我正在使用下面的代码捕捉来显示带有两个小数点的float价格值。

NumberFormat FORMAT = new DecimalFormat("#####0.00");
float myFloatValue =\\I am able to fetch this value dynamically
String finalPrice = FORMAT.format(myFloatValue);
// I am using this String (finalPrice) for export xml purpose.


看起来正常工作正常,但是我注意到一些示例(如下所示)无法正常工作,并产生两个以上小数点的价格。我无法再次复制它,只能在日志文件中看到它。

finalPrice字符串的一些示例输出:0.10999966、0.1800003、0.45999908。

有人可以帮助我从这些输出中猜测myFloatValue的原始值吗?这样可以帮助我复制场景并进行修复。

最佳答案

零星的出现使我想知道DECIMAL_FORMAT是否同时在多个线程中使用。那是禁忌。但是有人会期望
值也错误。

也许为了有条理也可以指定一个固定的Locale(小数点与逗号,千位分隔符)。

最后,float甚至double不适合财务软件:这些数字是近似值。

BigDecimal price = new BigDecimal("9.99");
price = price.multiply(BigDecimal.TWO); // 19.98 exact


BigDecimal是用于编写计算的PITA,但保持其精度。

关于java - Java中模式为##### 0.00的DecimalFormat怪异行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31563056/

10-15 08:51