为什么这个简单的比较在JavaScript中无法正常工作?

时间:2017-02-07 13:34:43

标签: javascript arrays

我正在开发一个电子学习项目,我需要一个简单的验证函数,它需要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

出了什么问题?

3 个答案:

答案 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