Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчеты денежных велечин, неверная работа с double 
V
    Опции темы
MisterCleric
Дата 10.7.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: нет
Всего: 38



Привет, люди, помогите решить задачу с ошибками при расчетах double(или float) чисел.
В общем задача такая: 
Есть форма куда пользователь в несколько полей может вбить числа в формате денег.
Есть число, которое сумма всех полей не должна превышать.
Последнее поле задизеблено: его содержимое должно рассчитываться на основе разницы основного числа и суммы значений из предыдущих полей.
возникает ошибка уже на суммировани этих полей.
пример:
Цитата

3333.52 + 3333.51 почему-то равно 6667.030000000001

Че за хрень блин?
вот мой код
Код

function calculateAmount(input, amount) {
    var inputs = dojo.query("input:not([type='hidden']):not([disabled='disabled'])", input.parentNode.parentNode.parentNode);
    var sumAmounts = 0;
    for (var i = 0; i < inputs.length; i++) {
        var groupAmount = parseFloat(inputs[i].value.replace(",", "."));
        if (isNaN(groupAmount)) {
            return;
        }
        sumAmounts += groupAmount;
    }
    var lastInput = dojo.query("input[disabled='disabled']", input.parentNode.parentNode.parentNode)[0];
    lastInput.value = ("" + ((amount - sumAmounts))).replace(".", ",");
}

Где я прогнал?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Soah
Дата 10.7.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 13
Всего: 54



PM MAIL   Вверх
MisterCleric
Дата 10.7.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: нет
Всего: 38



Спасибо за наведение на путь истинный. 
Выкрутился через приведение к целым числам
Код

function calculateAmount(input, amount) {
 var inputs = dojo.query("input:not([type='hidden']):not([disabled='disabled'])", input.parentNode.parentNode.parentNode);
    var sumAmounts = 0;
    for (var i = 0; i < inputs.length; i++) {
        var groupAmount = Math.round((parseFloat(inputs[i].value.replace(",", ".") * 100)));
        if (isNaN(groupAmount)) {
            return;
        }
          sumAmounts += groupAmount;
    }
    var lastInput = dojo.query("input[disabled='disabled']", input.parentNode.parentNode.parentNode)[0];
    lastInput.value = ((Math.round(parseFloat(amount * 100)) - sumAmounts) / 100).toFixed(2).replace(".", ",");
}



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1275 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.