2013-08-28 2 views
0

У меня есть форма с вводом, правильно выложенным с использованием идентификаторов и т. Д. Я развернул небольшую функцию jQuery для вычисления переменных формы. По сути, я хочу рассчитать общий НДС, а затем Grand Total.Вычисление формы 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, так что не стоит на самом деле вопрос, но думал, я хотел бы упомянуть Это.

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

Приветствия Ник

ответ

2

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

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

+0

Я хотел бы поблагодарить вас, а также @iBlue и Arun P Johny, поскольку это, похоже, привело меня немного дальше. Это имело бы смысл и, похоже, дало мне более значимые данные. В настоящее время незначительная проблема заключается в том, что grandTotal не дает правильного ответа.Я разделил два вычисления на отдельные сценарии, чтобы получить четкие строки разделения в коде. Не могли бы вы посоветовать событие 'change'? Нужно ли мне иметь все поля, которые могут быть изменены там или только один или два соответствующих? –

+0

Кроме того, результат имеет более 2 знаков после запятой. Могу ли я интегрировать функцию округления в выходы? Например, '$ ('# total'). Val (grandTotal), 2;'. Я знаю, что это не сработает, но предположим, что есть что-то подобное. Я пойду и посмотрю, но подумал, что я брошу его в этот вопрос, поскольку он будет применим для других, которые позже просмотрят это сообщение. –

+0

для округления вы можете использовать метод пола в javascript –

1

Поля a и b имеют тип строки, так что это делает конкатенацию.

Попытка

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

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

var grandTotal = a + d; 

с

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

попробовать это:

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); 

} 

я гавань испытания.

0

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

var num = new Number(value); 
Смежные вопросы