我正在开发一个电子学习项目,我需要一个简单的验证函数,它需要3个数组,当第3个数组中的每个元素等于第1个数组对应元素乘以2时返回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);

当我有浮动音符时,该函数在此示例中返回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
出了什么问题?
答案 0 :(得分:4)
这是一个舍入错误。您可能希望将数字四舍五入为固定的数字位数,如下所示:
parseFloat((your_number).toFixed(2));
具体而言,在if( parseFloat((coefficients[i]*notes[i]).toFixed(2))
答案 1 :(得分:1)
因为浮点数算术在JavaScript中不准确。
http://www.w3schools.com/js/tryit.asp?filename=tryjs_inaccurate2
以下是一些提供的解决方案:
http://www.w3schools.com/js/tryit.asp?filename=tryjs_inaccurate3
答案 2 :(得分:0)
可能必须修复,结果就像你正在使用它一样 https://www.google.es/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=javascript+toFixed
Becouse,圆形结果十进制为2
TKS