我正在开发一个电子学习项目,我需要一个简单的验证函数,它接受 3 个数组,并在第三个数组中的每个元素等于第一个数组对应元素乘以第二个数组元素时返回 true .
这 3 个数组的长度相同。
示例:
verifyNotes([5], [2], [11])
//should return false because 5*2=10
verifyNotes([5], [2], [10])
//should return true
这是我创建的函数(我认为没有什么特别的):
function verifyNotes(coefficients, notes, savedResults){
var resultVerif=true;
savedResults.forEach(function(element, i){
if( (coefficients[i]*notes[i]) !== savedResults[i] ){
resultVerif=false;
}
});
return resultVerif;
}
var verif1 = verifyNotes([1,4,2], [12,16,8], [12,64,16]);
console.info("Verif1: Are notes okay?", verif1);
问题
当我有 float 音符时,该函数在本示例中应该返回 true 时返回 false(因为 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
出了什么问题?
最佳答案
这是一个舍入错误。您可能需要将数字四舍五入为固定位数,如下所示:
parseFloat((your_number).toFixed(2));
具体来说,在 if( parseFloat((coefficients[i]*notes[i]).toFixed(2))
关于javascript - 为什么这个简单的比较在 JavaScript 中不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091215/