打印浮点数更多的小数点

时间:2019-03-08 11:40:17

标签: java floating-point decimal

当我尝试打印带有更多小数点的浮点数时,我遇到一种非常奇怪的行为。

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位数字,带有额外的零)

3 个答案:

答案 0 :(得分:1)

切勿使用浮点数或双精度数作为价格,浮点数和双精度数是近似值,请参阅:IEEE_754

请改为查看BigDecimal

精确地进行编辑:使用浮点数或双精度数表示小数是近似值。

答案 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答案以获取更详细的说明。