问题描述
欢迎来到浮点世界,那里的0.1不是0.1。问题在于,许多数字(包括0.1)无法精确表示在中double
。因此,实际上并不是x
每次循环都精确地添加0.1
。
一种方法是使用整数算术除以10:
int i = 0;
while (i <= 10) {
double x = i / 10.0;
. . .
i++;
}
另一种方法是制作x
一个BigDecimal
,您可以在其中指定所需的特定精度。它基本上是在做上面的循环(整数加小数位),但是打包成一个漂亮的类,里面有很多花哨的东西。哦,它具有任意精度。
解决方法
我的程序的一部分需要在while循环内使用以下值:
0.1
0.2
0.3
…
0.9
所以我需要在循环中提供它们。 这是代码:
double x = 0.0;
while ( x<=1 )
{
// increment x by 0.1 for each iteration
x += 0.1;
}
我需要输出准确:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
但这实际上给了我类似的东西:
0.1
0.2
0.300000000000000000000000004
0.4
0.5
0.6
0.799999999999999999999999999999
0.899999999999999999999999999999
0.99999999999999999999999999