Java,Float.parseFloat(),System.out.printf()不一致

0 java

考虑Java中的以下代码:

String input = "33.3";
float num = Float.parseFloat(input);  
System.out.printf("num: %f\n",num);      
Run Code Online (Sandbox Code Playgroud)

为什么输出上面的代码

num: 33.299999

不应该

num: 33.300000

如果有人能向我解释,我真的很感激.

ζ--*_*ζ-- 7

你是浮点错误的受害者.在基数2中,33.3技术上是一个重复的二进制(类似于重复的十进制),如同m/nmn整数一样写,并且gcd(m,n)=1素数因子n不是2的素因子的子集.这也意味着它不能写作为有限数量的项的总和,m*(2^n)其中mn是整数.

7/6在基数10中发生了类似的例子.

   _
1.16
Run Code Online (Sandbox Code Playgroud)

1.16666667
Run Code Online (Sandbox Code Playgroud)

然后按字面读取,并且不等于7/6.

  • 在二进制中没有小数点,只有一个二进制点,所以它是重复*二进制*(不是重复*十进制*) (5认同)