2013-05-01 3 views
-3
console.log((57/100) * 100); 

Когда я сделал эту математику в Javascript, она всегда возвращается 56.99999999. Почему его не 57.00000?Почему этот расчет не возвращает целого числа?

+4

Это проблема не ограничивается Javascript, но точности с плавающей точкой арифметики в целом, http://floating-point-gui.de /. – Xotic750

+0

следуйте этому http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken – Trikaldarshi

ответ

2

Чтобы получить точный ответ, вам нужно будет работать в целых числах или использовать десятичную библиотеку. Существуют некоторые десятичные библиотеки для Javascript, которые вычисляют значения с помощью целых чисел, а затем преобразуют значения обратно в десятичные. Например, есть библиотека BigNumber для Javascript.

Причина этого в том, что раздел (57/100) возвращает Float или номер с плавающей запятой в Javascript. JavaScript использует 64-bit floating point numbers, который на большинстве систем дает 53 бит точности для представления мантиссы или числовой части поплавка (3.2 в 3.2e4). В большинстве систем используется стандарт с плавающей запятой IEEE-754, который допускает любую ошибку операций с плавающей запятой, если на последнем месте меньше единицы (что в случае IEEE-754 64-бит - это 54-й бит). Поэтому все поплавки обрезаются, округляются и/или усекаются, поэтому результат возвращает дробное число.

Для получения дополнительной информации о том, почему это происходит, вы также можете увидеть: Is floating point math broken?