2017-07-12 9 views
0

私は現在、以下のcalcRatio関数を適切に計算するのに苦労しています。これはおそらく基本的な数学です! 以下の機能が期待どおりに動作:簡単な関数の引数

例えば
function calcRatio(){ 
    var r = frontRing.value/backCog.value; 
    return r; 
} 

frontRing = 52、backCog = 11、R = 4.7272 ....

以下

私に誤った結果が得られる:

function calcRatio(){ 
    var r = frontRing.value/(backCog.value + 5); 
    return r; 
} 

例をfrontRing = 52、backCog = 11r = 0.4521。

最終的には、5を引数に置き換えてください。

また、関数内でfrontRingとbackCog変数を.valueとして設定することもできません。これは問題を引き起こしている可能性がありますか?

Codepen link

+0

のようになります。あなたはbackCog.value + 5' ... –

答えて

1

あなたが抽出された値が文字列であることを期待して、追加の計算を持っている場合、あなたがいずれかの

parseInt(value , 10) - for integers 
parseFloat(value) - for decimals 
利用の場合

var r = frontRing.value/(backCog.value + 5);

backCog.valueを使用することが好ましいが、文字列でありますこれは入力要素の値であるからです。 +を使用して数値を追加すると、加算の代わりに連結が実行されます。

var backCogValue = backCog.value; // "11"; 

"11" + 5 --> 115、あなたが期待通りではない16

このコードを書く正しい方法は、数値を追加する前に上記の方法のいずれかを使用することです。

var frontRingValue = parseFloat(frontRing.value); 
var backCogValue = parseFloat(backCog.value); 

var r = (frontRingValue/ (backCogValue + 5)).toFixed(4); 

toFixedあなたが期待している小数点以下の桁数にフォーマットするために使用されます。あなたがプレイするとき5が関数に渡される引数をされた場合

、その後、あなたのコードは

function calcRatio(param) { 
    var frontRingValue = parseFloat(frontRing.value); 
    var backCogValue = parseFloat(backCog.value); 
    var paramValue = parseFloat(paramValue); 

    var r = (frontRingValue/ (backCogValue + paramValue)).toFixed(4); 
} 
+0

* "'の結果を記録する必要があります文字列値を数値に変換する必要がある場合のみです。 –

+0

@FelixKling Correct。 'elem.value'の返り値は、とにかく文字列です –

+0

そうですが、数字を使って作業するときは常に' parse * 'を使用するようにしてください。 ' 'の値を数値に変換しないときの問題点について説明した方がより役に立ちます。 –

関連する問題