Десятичное умножение JavaScript - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь умножить десятичное значение на 10 в Javascript:

console.log(1000.56 * 10);
console.log(100.56 * 10);

Это печать.

10005.59999999999
1005.6

Почему?

1 Ответ

0 голосов
/ 11 мая 2018

Как объяснено в в этом вопросе , поведение JavaScript по умолчанию для преобразования чисел с плавающей запятой в десятичное (при преобразовании в строку, для отображения, печати или других целей) заключается в использовании достаточного количества цифр дляоднозначно определить значение с плавающей запятой.

В 1000.56 * 10 возникают две ошибки округления.Первое происходит, когда 1000.56 конвертируется в число с плавающей запятой.Второе происходит, когда умножение выполняется.Две ошибки также встречаются в 100.56 * 10.Однако ошибки оказываются частично отмененными (они имеют противоположные направления, что является фактически случайным следствием того, где лежат представимые значения), и результат достаточно близок к 1005.6, чтобы алгоритм форматирования JavaScript использовал «1005.6» для результата.

В 1000.56 * 10 результат не был представимым числом с плавающей точкой, ближайшим к 10005.6, поэтому JavaScript использовал дополнительные цифры для его различения.

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