2016-09-21 3 views
1

Если я нахожу 0.3 в консоли Chrome, он печатает 0.3 назад у меня.Буквенное представление 0,3 в JavaScript

Это в основном говорит: «Вы ввели числовой литерал с содержимым 0.3, и я воспроизвожу это представление обратно в консоль в удобное для вас время, хотя под капотом и на самом деле он не может быть точно представлен и лучшее приближение, которое я могу придумать, это 0.30000000000000004 "?

ответ

2

На самом деле, это internal representation

0,299999999999999988897769753748434595763683319091796875

Это могло быть напечатано 0.29999999999999999, которая является внутреннее значение округляется до 17 значащих цифр. Округление до 17 digits is the conservative way to preserve any internal value. Но в этом случае 0.3 работает так же хорошо (в конце концов, это то, с чего вы начали), а так как это короче, это то, что напечатано.

Таким образом, он не взял ваш ввод строки и повторил его обратно - он просто сработал таким образом (как и для любого ввода из 15 значащих цифр или меньше).

+0

И '0.1 + 0.2' дает' 0.30000000000000004', потому что ошибки в представлении '0,1' и' 0,2' объединяются, чтобы дать результат, когда округлено до 17 значащих цифр '0.30000000000000004'. – Ben

+0

@BenAston: Да. [Нет более короткой строки, которая может воссоздать это значение двойной точности] (http://www.exploringbinary.com/java-doesnt-print-the-shortest-strings-that-round-trip/). –

Смежные вопросы