Lee*_*ogg -1 java loops floating-accuracy
我花了差不多整天试图弄清楚为什么会发生这种情况,如果它不是一个完整的数字直到它是一个整数,我的代码会增加一个浮点数,我会通过递增0.01和循环来触发它继续将它递增0.01直到它是一个整数然而它永远不会停止,调试它我注意到随着循环的进展而变得越来越不准确的数字导致它在结束时被0.0000066输出.
我想也许这个变量可能是以某种方式被别处访问所以我只是在一个空的"主"程序中创建它:
float value = 0;
for (int i=0; i<100; i++) {
value += 0.01f;
}
System.out.println(value); // Displays 0.99999934
System.out.println(value == 1); // Just in case it's displaying wrong in println (displays false)
Run Code Online (Sandbox Code Playgroud)
到底为什么这不是1?我不认为它可能与数据类型有任何关系,因为我正在向浮点数添加浮点数.
Java的浮点数遵循IEEE浮点标准,这意味着0.01之类的值无法完美表示(它是二进制的重复小数).只显示0.01时会出现一个小错误(转换为a时会变圆String
),但每次添加(或任何其他数学运算)时都会累积错误; 你已经显示出可见的效果.
您可以使用double
两倍的精度来减少浮点错误,但这也最终会显示浮点错误.您也可以使用BigDecimal
,它支持任意精度.
归档时间: |
|
查看次数: |
227 次 |
最近记录: |