2017-02-07 11 views
0

私は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 

何が問題になりますか?

+0

ヒットF12で、 "コンソール" に移動し、タイプ「1.5 * 15.66」で入力して – elementzero23

+0

と入力します。これについていくつかの光があります:http://stackoverflow.com/questions/588004/is-floating-point-math-broken –

+0

@ elementzero23 '1.5 * 15.66 23.490000000000002 (1.5 * 15.66).toFixed(2) " 23.49 " – Laazo

答えて

4

。あなたはこのように、数字の一定量にあなたの番号を丸めるすることもできます。具体的に

parseFloat((your_number).toFixed(2)); 

を、if(parseFloat((coefficients[i]*notes[i]).toFixed(2))

関連する問題