gpt4 book ai didi

java - Java 中的 DecimalFormat 与 #####0.00 模式的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 04:30:20 25 4
gpt4 key购买 nike

我使用下面的代码捕捉来显示带有两位小数的 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.109999660.18000030.45999908

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

最佳答案

这种零星的发生让我怀疑DECIMAL_FORMAT是否同时在多个线程中使用。这是一个禁忌。然而人们会期望值也错误

也许为了良好的顺序,还指定一个固定的区域设置(小数点与逗号、千位分隔符)。

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com