Странный цикл на Java для 0.1 до 2 - PullRequest
0 голосов
/ 23 марта 2011

Я попытался выполнить цикл от 0,1 до 2,0, а затем распечатать вывод на консоль .. Но я получил странный вывод, подобный этому:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
1.3
1.4000000000000001
1.5000000000000002
1.6000000000000003
1.7000000000000004
1.8000000000000005
1.9000000000000006
2.0000000000000004

Исходный код:

public class test {
    public static void main(String[] a) {
        double i = 0.1;
        while (i < 2.1)
            System.out.println(i);
            i+=0.1;
        }
    }
}

Почему это не печатает точные цифры вместо точки, как 0.79999999999? Также есть какая-то разница, используя for вместо while, так как я не знаю, как сделать приращение 0,1?

Ответы [ 2 ]

4 голосов
/ 23 марта 2011

Это нормально. Это присуще с плавающей точкой; числа типа 0.3 не могут быть сохранены как точные значения в двоичном виде, поэтому вы медленно накапливаете ошибки. Ссылки: Руководство по Python , Википедия , Техническое объяснение от Princeton CS .

0 голосов
/ 10 октября 2011

Это ошибка (на вашей стороне).

Не используйте числа с плавающей запятой, пока не узнаете, что они и как они работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...