Segue abaixo o que eu fiz, se alguém usar e encontrar algum bug, por favor, reporte para arrumar-mos!
function round_abnt(nValor, nDecimais) {
var nRetorno = nValor;
spl = nValor.toString().split(".");
var cDecimais = spl[1];
var nSubsequente = nDecimais;
if (nDecimais < 1) {
return parseInt(nRetorno);
}
if (cDecimais.length <= nDecimais) {
return parseFloat(nRetorno);
}
//Se a casa decimal SUBSEQUENTE for DIFERENTE de 5
if (cDecimais.substr(nSubsequente,1) > '5' || cDecimais.substr(nSubsequente,1) < '5') {
nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA
}
//Se a casa decimal SUBSEQUENTE for IGUAL a 5
else if (cDecimais.substr(nSubsequente, 1) == '5') {
//Se a casa decimal que será CONSERVADA, for IMPAR
if ((cDecimais.substr(nDecimais-1, 1) % 2) != 0) {
nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA
}
//Se a casa decimal que será CONSERVADA, for PAR
else
//Se APÓS a casa decimal SUBSEQUENTE, houver ALGUM algarismo MAIOR que ZERO
if ( cDecimais.substr(nSubsequente+1, 1) > 0 ) {
nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA
}
//Se APÓS a casa decimal SUBSEQUENTE, não houver NENHUM outro algarismo ou TODOS forem iguais a ZERO
else {
//TRUNCA (Esse é o único momento em que o "arredondamento ABNT" se diferencia do "arredondamento normal")
nRetorno = Truncate(nValor, nDecimais);
}
}
return parseFloat(nRetorno);
}
function Truncate(nValor, nDecimais) {
var nRetorno = nValor;
spl = nValor.toString().split(".");
var cDecimais = spl[1];
if (nDecimais < 1) {
return parseInt(nRetorno);
}
if (cDecimais.length <= nDecimais) {
return nRetorno;
}
//Pega a parte inteira do número e concatena com a substring sem alterar, pois é PAR e vai manter!
nRetorno = parseInt(nValor.toString()) + '.' + cDecimais.substr(0, nDecimais);
nRetorno = parseFloat(nRetorno);
return nRetorno;
}
Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.
Minha Pequena Contribuição: Arredondamento Abnt
em Dúvidas Gerais sobre o ACBr
Postado · Editado por Felipe Benutti
Opa, muito obrigado pelo código base, man!!
Me serviu muito, passei ele para JavaScript.
Segue abaixo o que eu fiz, se alguém usar e encontrar algum bug, por favor, reporte para arrumar-mos!