2012-02-17 9 views
1

JavaScriptの数学計算で問題が少しあります。 この計算の目的は、ユーザーがテキストフィールドをクリックしたときに値を生成することです。Javascriptによる数学計算の問題

例: 1キログラムはアメリカに出荷するのに32セントの費用がかかり、ユーザーは10KGの費用が$ 3.20であることを知りたいと考えています。このために私はjavascriptのコードの以下の部分を持っている:

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あり、彼/彼女はそれを出荷することができますどのくらいのKGを見つけるために望んでいます次のコードは、この計算のために使用されている

9.375KG:スクリプトが返されます(これは10KGです)

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を強制されています。したがって、price3.20の場合、3/0.32は実際には9.375です。

強制的に整数にしないでください。