Это функция округления, которую мы используем (которая берется из ответов stackoverflow о том, как округлить). Он округляет половину до 2dp (по умолчанию)Ошибка округления Javascript
например. 2,185 должен пойти в 2,19
function myRound(num, places) {
if (places== undefined) {
// default to 2dp
return Math.round(num* 100)/100;
}
var mult = Math.pow(10,places);
return Math.round(num* mult)/mult;
}
Он работал хорошо, но теперь мы обнаружили некоторые ошибки в нем (как в хроме и работает как JScript классический ASP на IIS 7.5).
т.д .:
alert(myRound(2.185)); // = 2.19
alert (myRound(122.185)); // = 122.19
alert (myRound(511.185)); // = 511.19
alert (myRound(522.185)); // = 522.18 FAIL!!!!
alert (myRound(625.185)); // = 625.18 FAIL!!!!
Кто-нибудь знает:
- Почему это происходит.
- Как мы можем округлить половину до 2 дп без случайных ошибок округления, подобных этому.
обновление: ОК, суть проблемы заключается в том, что в JS, 625,185 * 100 = +62518,499999 Как мы можем получить по этому поводу?
Вы можете использовать это: 'return + (num.toFixed (2));'. Но в целом лучше всего выполнить все вычисления сначала и округлить результат непосредственно перед печатью. – Teemu
@teemu, это округление, которое вызывает ошибку, и toFixed имеет такую же ошибку, к сожалению. –
Я тестировал это с помощью IE10 и FF21 с различными номерами, ошибок округления не было ... – Teemu