我正在使用下面的代码捕捉来显示带有两个小数点的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/