繁体   English   中英

使用更多小数点打印浮点数[重复]

[英]Print float with more decimal points [duplicate]

这个问题已经在这里有了答案:

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

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

我也用下面的代码,但得到相同的结果

DecimalFormat df = new DecimalFormat("0.000000");
System.out.println(df.format(price)); //prints 1602.719971

我期望outputValue为1602.720000 (十进制后的6位数字,带有额外的零)

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

看看BigDecimal

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

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.3作为2的幂的和写出?)。

您可以尝试Float.valueOf("1602.720000")Double.valueOf("1602.72") (更好),但是它们可能会有相同的问题。

请参阅答案以获取更详细的说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM