私はEラーニングプロジェクトに取り組んでいます。3つの配列を取り、3番目の配列の各要素が2番目の配列要素を掛けた1番目の配列対応要素と等しい場合にtrueを返す単純な検証関数が必要です。この単純な比較がJavaScriptで正しく機能しないのはなぜですか?
3つの配列の長さは同じです。
例:
verifyNotes([5], [2], [11])
//should return false because 5*2=10
verifyNotes([5], [2], [10])
//should return true
これは私が作成した関数(私は何も特別ではないと思います)です:私が持っている問題
function verifyNotes(coefficients, notes, savedResults){
\t var resultVerif=true;
\t savedResults.forEach(function(element, i){
\t \t if((coefficients[i]*notes[i]) !== savedResults[i]){
\t \t \t resultVerif=false;
\t \t }
\t });
\t return resultVerif;
}
var verif1 = verifyNotes([1,4,2], [12,16,8], [12,64,16]);
console.info("Verif1: Are notes okay?", verif1);
フロートノート、関数はfalseを返すこの例ではtrueを返します(1.5 * 15.66 = 23.49以降)。
var verif2 = verifyNotes([1,4,2,1.5], [12,16,8,15.66], [12,64,16,23.49]);
console.info("Verif2: Are notes okay?", verif2);
//ouputs: Verif2: Are notes okay? false
何が問題になりますか?
ヒットF12で、 "コンソール" に移動し、タイプ「1.5 * 15.66」で入力して – elementzero23
と入力します。これについていくつかの光があります:http://stackoverflow.com/questions/588004/is-floating-point-math-broken –
@ elementzero23 '1.5 * 15.66 23.490000000000002 (1.5 * 15.66).toFixed(2) " 23.49 " – Laazo