Це працює для округлення до N цифр (якщо ви просто хочете скоротити до N цифр, видаліть виклик Math.round та використовуйте один Math.trunc):
function roundN(value, digits) {
var tenToN = 10 ** digits;
return /*Math.trunc*/(Math.round(value * tenToN)) / tenToN;
}
Доводилося вдаватися до такої логіки на Java раніше, коли я писав маніпуляції даними компонентами E-Slate . Оскільки я дізнався, що додаючи 0,1 багато разів до 0, ви отримаєте деяку несподівано довгу десяткову частину (це пов'язано з арифметикою з плаваючою комою).
Коментар користувача на Формат номеру, щоб завжди показувати два знаки після коми, називає цю техніку масштабуванням.
Деякі згадують, що є випадки, які не крутяться, як очікувалося, і на веб- сайті http://www.jacklmoore.com/notes/rounding-in-javascript/ пропонується замість цього:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), але в IE це помилка : stackoverflow.com/questions/661562/… ; вам доведеться написати свою власну версію ...