当我尝试打印带有更多小数点的浮点数时,我遇到一种非常奇怪的行为。
res.send("filename.ejs",data
我也使用了下面的代码,但是得到了相同的结果
Float price = Float.valueOf("1602.72");
System.out.println(price); //prints 1602.72
outputValue = String.format("%.6f", price);
System.out.println(outputValue); //prints 1602.719971
我期望outputValue为DecimalFormat df = new DecimalFormat("0.000000");
System.out.println(df.format(price)); //prints 1602.719971
(十进制后有6位数字,带有额外的零)
答案 0 :(得分:1)
答案 1 :(得分:1)
float
是数字( 1 / 2 ^^ ? )
的二进制表示形式
像:
1/2^1 = 0.5,
1/2^2 = 0.25,
1/2^3 = 0.125,
1/2^4 = 0.0625, ...
结果是通过添加此二进制数以找到最接近的匹配项来呈现的。
答案 2 :(得分:0)
发生这种情况是因为floating point values are often imprecise for decimal fractions。
基本上,由于浮点数是使用2的负幂表示的,因此很难精确地表示一些十进制值(例如:您如何将0.3表示为2的幂?)。
您可以尝试使用Float.valueOf("1602.720000")
或Double.valueOf("1602.72")
(更好),但是这些问题可能会遇到相同的问题。
请参阅this答案以获取更详细的说明。