Сложение дробных чисел
Javascript меня сегодня замучил.
Сделал небольшое приложение на смеси JavaScript + PHP. Одной из функций данного приложения является оприходование товара. Форма строится следующим образом: сначала я ввожу общие итоги (для будущей сверки), а потом уже ввожу детализацию. При отправке формы производится проверка - суммируются определенные поля типа TEXT и сверяются с введенными первоначально итогами. Вбиваю в детализацию числа (4589; 2111.2; 3046.1; 964.5; 22.40; 67.8; 448.4) - сумма должна быть 11249.4 (проверял в Excel и на калькуляторе), а JavaScript выдает 11249,39 хоть ты его тресни. Та же ситуация с числами (31.56; 14.16; 22.05; 6.48; 0.14; 0.43; 3.19) - сумма должна быть 78.01, а JavaScript утверждает, что получается всего лишь 78. Теперь второй прикол - с первой группой чисел я просто увеличил произвольное число на 0.01 и и JavaScript выдал результат 11249.4. А вот со второй группой фокус не удался, т.к. JavaScript был окончательно пьян - при увеличении любого произвольного числа на 0.01 результат стал 78.02! При увеличении еще на 0.01 результат стал 78.03... Даже не знаю, какой из этих смайлов :lol: или:help: или:blink: или :cray: ставить... Я решил проверить, на каком из чисел происходит ошибка - в первой группе числа по 964.5 суммировались правильно, а 22.4 потащило ошибку. Во второй группе последнее число привело к ошибке. В PHP я сталкивался с чем-то подобным - там с дробными числами тоже происходил порой глюк - приписывались какие-то миллионные-миллиардные доли. Там я избавился путем отсекания у строкового представления числа всех лишних цифр. И здесь решил пойти пока тем же путем... Может кто-нибудь подсказать нормальный выход или лучше самому описать математические действия заново? |
alert(4589+2111.2+3046.1+964.5+22.40+67.8+448.4); не 11249,39, а 11249.399999999998 это особенность, ёе не исправить в js, только округлять |
|
Часовой пояс GMT +3, время: 12:44. |