Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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 я сталкивался с чем-то подобным - там с дробными числами тоже происходил порой глюк - приписывались какие-то миллионные-миллиардные доли. Там я избавился путем отсекания у строкового представления числа всех лишних цифр. И здесь решил пойти пока тем же путем... Может кто-нибудь подсказать нормальный выход или лучше самому описать математические действия заново?
Ответить с цитированием
  #2 (permalink)  
Старый 10.01.2012, 20:42
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

alert(4589+2111.2+3046.1+964.5+22.40+67.8+448.4);

не 11249,39, а 11249.399999999998
это особенность, ёе не исправить в js, только округлять
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 10.01.2012, 21:15
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Я уже отвечал на этот вопрос.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 20:03
Сложение случайных чисел user1111 Общие вопросы Javascript 14 08.11.2010 22:06
Сложение чисел очень важно исправьте ошибки плиз Хранитель Света Общие вопросы Javascript 9 24.10.2010 23:36
MYSQL SUM сложение и вычилсение nemo Серверные языки и технологии 1 03.08.2010 21:33