Javascript проблема с математическими вычислениями - PullRequest
0 голосов
/ 17 октября 2011

Почему, если я делаю это в javascript, я получаю следующий результат:

1234.56 * 10 = 12345.599999999999

Это должно быть 123456. Как я могу обойти эту проблему?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 16 января 2015

Другое простое решение:

parseFloat((1234.56 * 10).toPrecision(12))

, и результат будет: 12345,6, и ДА ... он работает с десятичными числами.

3 голосов
/ 17 октября 2011

Точки с плавающей запятой не являются точными, поскольку в их диапазоне есть ифинитные числа [или в любом диапазоне, если быть более точным], и только конечное число битов для хранения этих данных.

Посмотрите на что должен знать каждый программист об арифметике с плавающей запятой .

1 голос
/ 17 октября 2011

Как говорили другие, с плавающей точкой и т. Д.

Простым решением было бы сделать что-то вроде этого:

var answer = parseInt(1234.56 * 10);

Или просто использовать Math.round?

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

Все числа в JS внутренне определены как float и, при необходимости, сбрасывают менее значимые цифры.

(10000000000000000000000000000 + 1) == 10000000000000000000000000000
// this will return true

И javascript хорошо известен тем, что он часто отбрасывает биты в числах. Так что обращайтесь с осторожностью

...