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 ?
如果有人能向我解释,我真的很感激.
你是浮点错误的受害者.在基数2中,33.3技术上是一个重复的二进制(类似于重复的十进制),如同m/n用m和n整数一样写,并且gcd(m,n)=1素数因子n不是2的素因子的子集.这也意味着它不能写作为有限数量的项的总和,m*(2^n)其中m和n是整数.
7/6在基数10中发生了类似的例子.
_
1.16
Run Code Online (Sandbox Code Playgroud)
变
1.16666667
Run Code Online (Sandbox Code Playgroud)
然后按字面读取,并且不等于7/6.
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |