2012-02-17 2 views
1

У меня проблемы с несколькими вычислениями в javascript. Целью этого расчета является генерация значения, когда пользователь нажимает на текстовое поле.Ошибка вычисления математики с Javascript

Например: 1 Стоимость килограмма стоит 32 цента для отправки в Америку, и пользователь хочет узнать, что будет стоить 10 кг, что составляет 3,20 доллара США. Для этого у меня есть следующий фрагмент яваскрипт кода:

function calculate(num) { 
     var weight = document.getElementById('weight'+num); 
     var price = document.getElementById('price'+num); 
     if(num == undefined || num == '' || num.length <= 0 || isNaN(weight.value) || isNaN(price.value)) return false; 

     if(num == 1) multiplyBy = 0.32; 
     if(num == 2) multiplyBy = 0.14; 
     if(num == 3) multiplyBy = 0.24; 
     if(num == 4) multiplyBy = 0.53; 

     var sum = parseInt(document.getElementById('weight'+num).value) * multiplyBy; 
     if(isNaN(sum)) return false; 
     price.value = sum; 
    } 

Приведенные выше код работает прекрасно, однако, когда я обратный процесс (кто-то есть $ 3,20 и хочет, чтобы узнать, сколько К.Г. он/она может поставляться с этим (который 10кг) сценарий возвращает: 9.375KG

следующий код используется для этого расчета:

function reverse(num) { 
     var weight = document.getElementById('weight'+num); 
     var price = document.getElementById('price'+num); 
     if(num == undefined || num == '' || num.length <= 0 || isNaN(weight.value) || isNaN(price.value)) return false; 

     if(num == 1) divideBy = 0.32; 
     if(num == 2) divideBy = 0.14; 
     if(num == 3) divideBy = 0.24; 
     if(num == 4) divideBy = 0.53; 

     var sum = parseInt(document.getElementById('price'+num).value)/divideBy; 
     if(isNaN(sum)) return false; 
     weight.value = sum; 
    } 

Я честно не понять, почему это не удается, было бы весьма признателен, если кто-то может помогите мне с этим.

+1

Это связано не столько с ошибками с плавающей запятой, сколько с синтаксическим анализом float как int –

+2

Возможно, также урок в том, почему использование целых чисел (так 1c == 1, а не 1c == 0.01) для валютных расчетов часто является путь. –

+0

Читайте слишком быстро. Я удалю его. – duffymo

ответ

4
var sum = parseInt(document.getElementById('price'+num).value)/divideBy; 

Вы вынуждаете price в целое число, прежде чем разделить его. Поэтому, если price - 3.20, вы фактически делят 3/0.32, что составляет 9.375.

Не вставляйте его в целое число.

Смежные вопросы