value Como arredondar um número em JavaScript?




math round javas (8)

Eu quero usar o Javascript para arredondar um número. Como o número é moeda, quero arredondá-lo como nesses exemplos (2 pontos decimais):

  • 192,168 => 192,20
  • 192,11 => 192,20
  • 192,21 => 192,30
  • 192,26 => 192,30
  • 192,20 => 192,20

Como conseguir isso usando JavaScript? A função Javascript integrada irá arredondar o número com base na lógica padrão (menos e mais de 5 para arredondar para cima).


Muito perto da resposta do TheEye , mas mudo um pouco para que funcione:

var num = 192.16;
    
console.log(    Math.ceil(num * 10) / 10    );


este limite de função decimal sem número redondo

function limitDecimal(num,decimal){
     return num.toString().substring(0, num.toString().indexOf('.')) + (num.toString().substr(num.toString().indexOf('.'), decimal+1));
}

Pouco tarde, mas, pode criar uma função de javascript reutilizável para essa finalidade:

// Arguments: number to round, number of decimal places
function roundNumber(rnum, rlength) { 
    var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}

Chame a função como

alert(roundNumber(192.168,2));

/**
 * @param num The number to round
 * @param precision The number of decimal places to preserve
 */
function roundUp(num, precision) {
  precision = Math.pow(10, precision)
  return Math.ceil(num * precision) / precision
}

roundUp(192.168, 1) //=> 192.2

O arredondamento normal funcionará com um pequeno ajuste:

Math.round(price * 10)/10

e se você quiser manter um formato de moeda, você pode usar o método Number .toFixed()

(Math.round(price * 10)/10).toFixed(2)

Embora isso torne isso uma String =)


O OP espera duas coisas:
A. para arredondar para os décimos mais altos, e
B. para mostrar um zero no centésimo lugar (uma necessidade típica com moeda).

Atender a ambos os requisitos parece exigir um método separado para cada um dos itens acima. Aqui está uma abordagem que se baseia na resposta sugerida por suryakiran:

//Arguments: number to round, number of decimal places.

function roundPrice(rnum, rlength) {
    var newnumber = Math.ceil(rnum * Math.pow(10, rlength-1)) / Math.pow(10, rlength-1);
    var toTenths = newnumber.toFixed(rlength);
    return toTenths;
}

alert(roundPrice(678.91011,2)); // returns 679.00
alert(roundPrice(876.54321,2)); // returns 876.60

Nota importante: esta solução produz um resultado muito diferente com números negativos e exponenciais.

Por uma questão de comparação entre esta resposta e duas que são muito semelhantes, veja as duas abordagens a seguir. O primeiro simplesmente arredonda para o centésimo mais próximo por usual, e o segundo simplesmente arredonda para o centésimo mais próximo (maior).

function roundNumber(rnum, rlength) { 
    var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}

alert(roundNumber(678.91011,2)); // returns 678.91

function ceilNumber(rnum, rlength) { 
    var newnumber = Math.ceil(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}

alert(ceilNumber(678.91011,2)); // returns 678.92

parseInt sempre arredonda soo .....

console.log(parseInt(5.8)+1);

do parseInt () + 1


ok, isso foi respondido, mas achei que você gostaria de ver minha resposta que chama a função math.pow () uma vez. Eu acho que gosto de manter as coisas secas.

function roundIt(num, precision) {
    var rounder = Math.pow(10, precision);
    return (Math.round(num * rounder) / rounder).toFixed(precision)
};

Meio que coloca tudo junto. Substitua Math.round () por Math.ceil () para arredondar em vez de arredondar, que é o que o OP queria.





rounding