This question already has answers here:
Is floating point math broken?
(31个答案)
Java float unexpectedly rounded
(3个答案)
3年前关闭。
我尝试了以下
我得到以下输出:
0.0
1.0E-4
2.0E-4
3.0000000000000003E-4
4.0E-4
5.0E-4
6.000000000000001E-4
7.000000000000001E-4
8.000000000000001E-4
9.000000000000002E-4
我的问题是:
这些额外的
这些额外的数字会一直出现吗,还是我的代码有问题?
这些错误是否仅在Java语言或任何其他编程语言中发生?
(31个答案)
Java float unexpectedly rounded
(3个答案)
3年前关闭。
我尝试了以下
for
循环:for(double i = 0.0; i<=0.001; i+=0.0001)
System.out.println(i);
我得到以下输出:
0.0
1.0E-4
2.0E-4
3.0000000000000003E-4
4.0E-4
5.0E-4
6.000000000000001E-4
7.000000000000001E-4
8.000000000000001E-4
9.000000000000002E-4
我的问题是:
这些额外的
.000000000000001
是怎么来的?这些额外的数字会一直出现吗,还是我的代码有问题?
这些错误是否仅在Java语言或任何其他编程语言中发生?
double
是否适合for
循环? 最佳答案
可悲的是,并非所有数字都可以用floating point精确表示:
例如,十进制数0.1不能用二进制表示
任何有限精度的浮点;确切的二进制
表示将有一个“ 1100”序列无休止地连续:
e = −4; s = 1100110011001100110011001100110011 ...,其中
以前,s是有效数字,e是指数。
当四舍五入为24位时,
e = −4; s = 110011001100110011001101,实际上是
以十进制表示的0.100000001490116119384765625。
07-24 19:53