javascript и машина в общей ручке с двойным, как почти бесконечное число.
при округлении до 2 знаков после запятой, javascript дает ближайший округлый номер.
, чтобы исправить это, используйте:
var pay = -0.33;
var res = parseFloat(pay) + parseFloat(0.11) + parseFloat(0.22);
res = res.toFixed(2);
return (Math.round(res * 100)/100);
путь лучше, чем друга обходные здесь будет оценивать строки ..
EDIT
если изменить круглое число, лучше использовать это:
var fixRound = 2,
pay = -0.33,
rounding = Math.pow(10, fixRound),
res = parseFloat(pay) + parseFloat(0.11) + parseFloat(0.22);
res = res.toFixed(fixRound);
return (Math.round(res * rounding)/rounding);
это путь, все, что вам нужно изменить в коде, чтобы оно работало с toFixed (3), toFixed (4), toFixed (5) и т. д., просто установлено значение fixRound
- это номер, который вы хотите.
Что странно об этом? Фактическое число: '-2.7755575615628914e-17'. Это так мало, когда вы конвертируете его в строку через 'toFixed (2)', что результат равен '0,00'. Знак показывает, что он округлен с отрицательного числа. –
Есть уже несколько js парсинга значений float вопросов: http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript http: // stackoverflow. ком/вопросы/11695618/дилинг-с-флоат-точность в языке JavaScript – BHoft