Расчет формы jQuery - работает, но странные результаты

У меня есть форма с входами, правильно расположенными с использованием идентификаторов и т. Д. Я развернул небольшую функцию jQuery для вычисления переменных формы. По сути, я хочу рассчитать общую сумму НДС, а затем общую сумму.

Пример кода был взят из http://forum.jquery.com/topic/calculation-on-form-fields и это работает хорошо. Однако я умножение / деление работает для НДС, но сложение дает некоторые очень странные результаты.

Пример ввода данных:
siteFee = 3000
кол-во = 1
НДС = 20

Функция НДС (a * b * c) /100 вычисляет ОК и дает 600, что было бы правильно, однако grandTotal выходит на 3000611.6659999999999, что не имеет большого смысла. Похоже, что он пытается объединить значения вместе, а не сложить их вместе, но опять же, это на самом деле тоже не происходит!

Код jQuery:

<script>
         $(document).ready(function() {
           function compute() {
                  var a = $('#siteFee').val();
                  var b = $('#qty').val();
                  var c = $('#vat').val();
                  var d = $('#incVAT').val();
                  var totalVAT = (a * b * c) / 100;
                  var grandTotal = a + d;

                    $('#incVAT').val(totalVAT);
                    $('#total').val(grandTotal);

                }

                $('#siteFee, #qty, #siteFeeID, #vat').change(compute);
         });
    </script>

Обратите внимание, что #siteFeeID это просто еще одна переменная формы, где я делаю Ajax, чтобы получить правильные значения для #siteFee так что это не должно иметь большого значения, но я подумал, что упомяну это.

Любые указатели были бы замечательными.

Ура ник

5 ответов

Решение

Попробуйте использовать функции parseFloat() или parseInt (), когда выполняете вычисления в javascript, потому что + является опцией для конкатенации в javascript

Так var grandTotal = parseFloat(a) + parseFloat(d);

Попробуй это:

function compute() {
      var a = parseFloat($('#siteFee').val());
      var b = parseFloat($('#qty').val());
      var c = parseFloat($('#vat').val());
      var d = parseFloat($('#incVAT').val());
      var totalVAT = (a * b * c) / 100;
      var grandTotal = a + d;

      $('#incVAT').val(totalVAT);
      $('#total').val(grandTotal);

}

я не проверял

Попробуйте заменить

var grandTotal = a + d;

с

var grandTotal = Number(a) + Number(d);

Поля a а также b имеют тип string, поэтому он выполняет конкатенацию строк.

Пытаться

var grandTotal = parseFloat(a) + parseFloat(d);

Вы также можете изначально создать переменные в виде чисел, что может быть чище для дальнейших вычислений, которые вам нужно сделать.

 var num = new Number(value);
Другие вопросы по тегам