Eu sou novo em JavaScript e acabei de descobrir toFixed()
e toPrecision()
arredondar números. No entanto, não consigo descobrir qual é a diferença entre os dois.
Qual é a diferença entre number.toFixed()
e number.toPrecision()
?
fonte
Eu sou novo em JavaScript e acabei de descobrir toFixed()
e toPrecision()
arredondar números. No entanto, não consigo descobrir qual é a diferença entre os dois.
Qual é a diferença entre number.toFixed()
e number.toPrecision()
?
toFixed(n)
fornece n
comprimento após o ponto decimal; toPrecision(x)
fornece x
comprimento total.
Ref na w3schools: toFixed e toPrecision
EDIT :
Aprendi há algum tempo que o w3schools não é exatamente a melhor fonte, mas esqueci essa resposta até ver o comentário "entusiasmado" de kzh. Aqui estão outras referências do Mozilla Doc Center paratoFixed()
e paratoPrecision()
. Felizmente para todos nós, o MDC e o w3schools concordam nesse caso.
Para completar, devo mencionar que toFixed()
é equivalente a toFixed(0)
e toPrecision()
apenas retorna o número original sem formatação.
toPrecision(x)
não "fornecex
comprimento total", formata para um número de dígitos significativos. Por exemplo,0.0000022.toPrecision(1)
retornaria0.000002
.toPrecision(x)
fornecex
comprimento total". não é necessariamente válido. Exemplo de contador:0.00001234.toPrecision(3)
Acredito que o primeiro fornece um número fixo de casas decimais, enquanto o último fornece um número fixo de dígitos significativos.
Além disso,
toPrecision
produzirá notação científica se houver mais dígitos inteiros no número do que a precisão especificada.EDIT: Ah, e se você é novo no JavaScript, recomendo o livro " JavaScript: The Good Parts ", de Douglas Crockford.
fonte
Os exemplos falam claramente:
fonte
Eu acho que isso é melhor respondido com um exemplo.
Digamos que você tenha os seguintes dados:
Você deseja exibir cada um desses produtos com o título e o preço formatado. Vamos tentar usar
toPrecision
primeiro:Parece bom, então você pode pensar que isso funcionará também para os outros produtos:
Não tão bom. Podemos corrigir isso alterando o número de dígitos significativos para cada produto, mas se estivermos repetindo a variedade de produtos, isso pode ser complicado. Vamos usar
toFixed
:Isso produz o que você esperava. Não há trabalho de adivinhação envolvido e não há arredondamento.
fonte
Somente:
fonte
Sob certas circunstâncias,
toPrecision()
retornará notação exponencial, enquantotoFixed()
não retornará .fonte
toExponential()
é uma função separada .a = 999999999999999934464;
,a.toFixed(0)
retorna"1e+21"
. Talvez uma resposta mais precisa seja que toFixed () não retorne notação exponencial, a menos que toString () retorne.Por exemplo, consideramos a variável a como, var a = 123,45 a.toPrecisão (6) A saída é 123,450 a.toFixed (6) A saída é semelhante a 123.450000 // 6 dígitos após o ponto decimal
fonte
Ambas
toPrecision()
etoFixed()
são funções projetadas para formatar um número antes de imprimi-lo. Então, ambos retornamString
valores.Há uma exceção. Se você usar essas funções em um literal numérico negativo , devido à precedência do operador, um número será retornado. O que isso significa é que
toFixed()
outoPrecision()
retornará uma string primeiro e, em seguida, o-
operador menos converterá a string novamente em um número como um valor negativo. Veja abaixo um exemplo.toPrecision()
retorna umString
representando o objeto Number em notação de ponto fixo ou exponencial arredondado para dígitos significativos. Portanto, se você especificar que deseja uma precisão de 1, ele retornará o primeiro número significativo juntamente com a notação científica para indicar as potências de 10 ou os 0 anteriores antes de seu ponto decimal, se o número significativo for <0.toFixed()
retorna umString
representando o objeto Number na notação de ponto fixo, arredondado para cima. Esta função se importa apenas com os números decimaisMencionei acima uma exceção em que o uso dessas funções em literais Number negativos retornará um Number e não uma String devido à precedência do operador. aqui estão alguns exemplos:
Curiosidade: existem zeros assinados como vistos em
-0.0456.toFixed(1)
Veja: +0 e -0 são iguais?
fonte