Java中的双倍增量

问题描述

欢迎来到浮点世界,那里的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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”