Tenho os resultados de uma divisão e desejo descartar a parte decimal do número resultante.
Como posso fazer isso?
fonte
Tenho os resultados de uma divisão e desejo descartar a parte decimal do número resultante.
Como posso fazer isso?
Você poderia usar ...
Math.trunc()
(parte fracionária truncada, veja também abaixo)Math.floor()
(arredondar para baixo)Math.ceil()
(arredondar para cima) Math.round()
(arredondar para o número inteiro mais próximo)... depende de como você deseja remover o decimal.
Math.trunc()
ainda não é suportado em todas as plataformas (a saber, IE), mas você pode facilmente usar um polyfill nesse meio tempo.
Outro método de truncar a parte fracionária com excelente suporte à plataforma é usar um operador bit a bit (.eg |0
). O efeito colateral de usar um operador bit a bit em um número é que ele tratará seu operando como um número inteiro de 32 bits assinado, removendo, portanto, o componente fracionário. Lembre-se de que isso também altera números maiores que 32 bits.
Você também pode estar falando sobre a imprecisão do arredondamento decimal na aritmética de ponto flutuante.
Math.floor()
isso aumentará o valor numérico quando o número for negativo . AssimMath.floor(-1.2) -> -2
enquantoMath.floor(1.2) -> 1
.parseInt(-1.2) -> -1
( como mencionado por @FloydPink ) descartará a parte decimal conforme o esperado para números positivos e negativos .> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100
javascript é229.99999999999997
, portanto, parece que o operador bit a bit está fazendo seu trabalho corretamente no seu exemplo.|0
que usa números inteiros de 64 bits?Você também pode usar operadores bit a bit para truncar o decimal.
por exemplo
As operações bit a bit são consideravelmente mais eficientes que as funções matemáticas. O operador não bit a bit dupla também parece superar ligeiramente os
x | 0
ex << 0
bit a bit operações por um valor insignificante.Também digno de nota é que o operador bit a bit não tem precedência sobre operações aritméticas, portanto, pode ser necessário cercar os cálculos entre parênteses para obter o resultado pretendido:
Mais informações sobre o operador double bitwise not podem ser encontradas em Double bitwise NOT (~~)
fonte
Você também pode fazer
fonte
parseInt
não funcionará de maneira confiável para números grandes, porque ele primeiro converte seu argumento em uma string e, para números grandes, o resultado usará notação exponencial. Por exemplo:var n = 22222222222222222222222; parseInt(n);
retornará2
, porquen.toString()
retorna2.2222222222222223e+22
.parseInt()
para esse fim, que é pegar um número em uma string e retornar aNumber
.Você também pode mostrar um certo número de dígitos após o ponto decimal (aqui 2 dígitos) usando o seguinte código:
fonte
Use a
Math.round()
funçãofonte
$.round = Math.round
;)Use
Math.round()
.(A resposta de Alex é melhor; eu assumi :)
fonte
Com o ES2015, Math.trunc () está disponível.
Não é suportado no IE11 ou abaixo, mas funciona no Edge e em qualquer outro navegador moderno.
fonte
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)
isso funcionaria?value = 2.3
ex = 2
retornará2.29
. Eu não tenho uma sugestão melhor.Se você não se importa com o roteamento, basta converter o número em uma sequência e remover tudo depois do período, inclusive o período. Isso funciona se existe um decimal ou não.
fonte
O toFixed se comportará como redondo.
Para um comportamento semelhante ao piso, use%:
fonte
Aqui está o compressivo na explicação detalhada com a ajuda dos posts acima:
1. Math.trunc (): É usado para remover os dígitos que são seguidos pelo ponto. Ele converte implicitamente. Mas, não suportado no IE.
Exemplo:
Math.trunc (10.5) // 10
Math.trunc (-10.5) // -10
Outra maneira alternativa: Uso do operador bit a bit, não:
Exemplo:
x = 5,5
~~ x // 5
2. Math.floor (): É usado para fornecer o valor inteiro mínimo possível. É suportado em todos os navegadores.
Exemplo:
Math.floor (10.5) // 10
Math.floor (-10.5) // -11
3. Math.ceil (): É usado para fornecer o maior valor inteiro possível. É suportado em todos os navegadores.
Exemplo:
Math.ceil (10.5) // 11
Math.ceil (-10.5) // -10
4. Math.round (): é arredondado para o número inteiro mais próximo. É suportado em todos os navegadores.
Exemplo:
Math.round (10.5) // 11
Math.round (-10.5) // -10
Math.round (10.49) // 10
Math.round (-10.51) // -11
fonte
Para uma implementação ES6, use algo como o seguinte:
fonte
Isto é para aqueles que desejam impedir que os usuários insiram números decimais
fonte
Você pode usar .toFixed (0) para remover a parte decimal completa ou fornecer o número nos argumentos até os quais você deseja que o decimal seja truncado.
Nota: toFixed converterá o número em string.
fonte
Por exemplo:
ou
fonte