Показать сообщение отдельно
  #1 (permalink)  
Старый 10.01.2012, 20:32
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 182

Сложение дробных чисел
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... Даже не знаю, какой из этих смайлов или или или ставить...
Я решил проверить, на каком из чисел происходит ошибка - в первой группе числа по 964.5 суммировались правильно, а 22.4 потащило ошибку. Во второй группе последнее число привело к ошибке.
В PHP я сталкивался с чем-то подобным - там с дробными числами тоже происходил порой глюк - приписывались какие-то миллионные-миллиардные доли. Там я избавился путем отсекания у строкового представления числа всех лишних цифр. И здесь решил пойти пока тем же путем... Может кто-нибудь подсказать нормальный выход или лучше самому описать математические действия заново?
Ответить с цитированием