Java语言计算不准确?
我尝试了以下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
循环李>
# 1 楼答案
遗憾的是,并非所有数字都能在floating point中准确表示:
# 2 楼答案
尝试使用BigDecimal,下面是我的示例代码:
输出为:
顺便说一句,我并没有把时间花在内存管理和其他细节上,这应该是一个比使用原语更繁重的过程