A resposta de Dogbert é boa, mas se seu código tiver que lidar com números negativos, Math.floor
por si só pode fornecer resultados inesperados.
Por exemplo Math.floor(4.3) = 4
, masMath.floor(-4.3) = -5
Use uma função auxiliar como esta para obter resultados consistentes:
truncateDecimals = function (number) {
return Math[number < 0 ? 'ceil' : 'floor'](number);
};
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100;
Esta é uma versão mais conveniente desta função:
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);
Se esse não for o comportamento desejado, insira uma chamada para Math.abs
na primeira linha:
var multiplier = Math.pow(10, Math.abs(digits)),
EDIT: shendz corretamente aponta que usar esta solução com a = 17.56
produzirá incorretamente 17.55
. Para saber mais sobre por que isso acontece, leia O que todo cientista da computação deve saber sobre aritmética de ponto flutuante . Infelizmente, escrever uma solução que elimina todas as fontes de erro de ponto flutuante é muito complicado com javascript. Em outro idioma você usaria inteiros ou talvez um tipo decimal, mas com javascript ...
Esta solução deve ser 100% precisa, mas também será mais lenta:
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);
}
Para quem precisa de velocidade, mas também deseja evitar erros de ponto flutuante, tente algo como BigDecimal.js . Você pode encontrar outras bibliotecas javascript BigDecimal nesta pergunta do SO: "Existe uma boa biblioteca Javascript BigDecimal?" e aqui está uma boa postagem no blog sobre bibliotecas matemáticas para Javascript