Я работаю над проектом электронного обучения, и мне нужно иметь простую функцию проверки, которая принимает 3 массива и возвращает true, когда каждый элемент 3-го массива равен первому элементу, соответствующему элементу, умноженному на элемент 2-го массива.Почему это простое сравнение не работает корректно в 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);
Проблема
Когда у меня есть float notes, функция возвращает 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
Что происходит не так?
Hit F12 в вашем браузере, перейдите в раздел «консоль», тип в '1.5 * 15.66' и нажмите enter – 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