Відповідь Догберта хороша, але якщо ваш код може мати справу з від’ємними числами, він Math.floor
сам по собі може дати несподівані результати.
Наприклад Math.floor(4.3) = 4
, алеMath.floor(-4.3) = -5
Замість цього використовуйте допоміжну функцію, як ця, щоб отримати стабільні результати:
truncateDecimals = function (number) {
return Math[number < 0 ? 'ceil' : 'floor'](number);
};
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100;
Ось більш зручна версія цієї функції:
truncateDecimals = function (number, digits) {
var multiplier = Math.pow(10, digits),
adjustedNum = number * multiplier,
truncatedNum = Math[adjustedNum < 0 ? 'ceil' : 'floor'](adjustedNum);
return truncatedNum / multiplier;
};
var a = 5.467;
var truncated = truncateDecimals(a, 2);
var b = 4235.24;
var truncated = truncateDecimals(b, -2);
Якщо це не є бажаною поведінкою, введіть виклик до Math.abs
першого рядка:
var multiplier = Math.pow(10, Math.abs(digits)),
РЕДАКТУВАТИ : shendz правильно зазначає, що використання цього рішення з a = 17.56
буде неправильним результатом 17.55
. Докладніше про те, чому це трапляється, читайте в статті Що слід знати кожному вченому-комп'ютеристу про арифметику з плаваючою крапкою . На жаль, писати рішення, яке усуває всі джерела помилок із плаваючою комою, досить складно з JavaScript. Іншою мовою ви б використовували цілі числа або, можливо, десятковий тип, але з javascript ...
Це рішення має бути на 100% точним, але воно також буде повільнішим:
function truncateDecimals (num, digits) {
var numS = num.toString(),
decPos = numS.indexOf('.'),
substrLength = decPos == -1 ? numS.length : 1 + decPos + digits,
trimmedResult = numS.substr(0, substrLength),
finalResult = isNaN(trimmedResult) ? 0 : trimmedResult;
return parseFloat(finalResult);
}
Для тих, хто потребує швидкості, але також хоче уникнути помилок з плаваючою комою, спробуйте щось на зразок BigDecimal.js . Ви можете знайти інші бібліотеки Javascript BigDecimal у цьому запитанні SO: "Чи є хороша бібліотека Javascript BigDecimal?" і ось хороший допис у блозі про математичні бібліотеки для Javascript