私は渡された変数に基づいて結果を返すJavascript関数を持っています。しかし、計算中に間違った値を与えています。JavaScriptの方程式が不正確な値を生成する
私はここに犯人を狭めてきました:
その数値でコードから変数を交換するときに(はい、私は彼らがに渡される正しい値であることを確認するためにチェックしましたMath.floor((obj.mem1.val1 + i) * (obj.mem2[param][j].val2))
式)、それは次のとおりです。
Math.floor((90 + 15) * (0.5343543))
代わりに等しい56
に出てくるはずですが4817
を与えています。ブラウザを手動で正確な計算を実行することが右の数を出しますが、それはまだ4817
を言って警告ボックスを与えた場合にだけ見ることが
alert(Math.floor((90 + 15) * (0.5343543)))
:私もに追加しました。
これを行う可能性はありますか?それは基本的な数学を間違っている。何か私はいつもコンピュータが正しく動作するように信頼してきました。コメント欄で述べたように
var obj = {
"mem1": {
"val1": "90" // <-- issue was ultimately here this value was being
// populated from
// document.getElementById().innerHTML
// elsewhere in the code, so it was saving a string
},
"mem2": {
"something-passed-through-param": [
{ "val2": 0.5343543 }
]
}
};
function func(param, i, j) {
var ret = Math.floor((obj.mem1.val1 + i) * (obj.mem2[param][j].val2));
return ret;
}
// Correct code would have been:
var ret = Math.floor((Number(obj.mem1.val1) + i) * (obj.mem2[param][j].val2));
明らかに、何かはあなたが信じているものではありません。 [最小限のテストケース](http://stackoverflow.com/help/mcve)を構築してください。さもなければ、基本的に推測ゲームをしています。 –
私はコンソールで同じコードを実行し、56を取得しました。何かがあなたの値を乱している必要があります。 –
'obj.mem1.val1'は' i'に追加される前に数値に変換されていますか?あなたの '('90 '+ 15)*(0.5343543)'のように見えますが、それは '4817'またはその周辺に現れます。基本的には、あなたが本当に得ているのは連結ですと思います。 ' + 'は '+ 'が加算ではなく連結演算子として扱われます。あなたはおそらくそれを何とか左から3文字にトリミングしています。 –