Eu tenho o valor 25.00
em a float
, mas quando imprimo na tela é 25.0000000
.
Como posso exibir o valor com apenas duas casas decimais?
objective-c
formatting
floating-point
mskfisher
fonte
fonte
Respostas:
Não é uma questão de como o número é armazenado, é uma questão de como você o está exibindo. Ao convertê-lo em uma sequência, você deve arredondar para a precisão desejada, que no seu caso tem duas casas decimais.
Por exemplo:
%.02f
informa ao formatador que você estará formatando um float (%f
) e, que deve ser arredondado para dois lugares e deve ser preenchido com0
s.Por exemplo:
fonte
25
...@"%.f"
faz o truque. O que está escrito acima, não .@"%.*f", decimalPlaces, number
%03.f = 025
Aqui estão algumas correções -
Swift 3
Obj-C
e assim por diante...
fonte
Você também pode tentar usar o NSNumberFormatter:
Você pode precisar também definir o formato negativo, mas acho que é inteligente o suficiente para descobrir.
fonte
Fiz uma extensão rápida com base nas respostas acima
uso:
fonte
No Swift Language, se você deseja mostrar, precisa usá-lo dessa maneira. Para atribuir valor duplo no UITextView, por exemplo:
Se você deseja mostrar no LOG como o objetivo-c faz usando o NSLog (), em Swift Language você pode fazer o seguinte:
fonte
No objetivo-c, se você estiver lidando com matrizes de caracteres regulares (em vez de ponteiros para o NSString), também poderá usar:
OTOH, se o que você deseja é armazenar esse valor em uma matriz de caracteres, você pode usar:
fonte
O problema com todas as respostas é que multiplicar e depois dividir resulta em problemas de precisão porque você usou a divisão. Aprendi isso há muito tempo com a programação em um PDP8. A maneira de resolver isso é:
Assim, 15.6578 retorna apenas 15.66 e não 15.6578999 ou algo não intencional assim.
Qual o nível de precisão que você deseja depende de você. Apenas não divida o produto, multiplique-o pelo equivalente decimal. Não é necessária nenhuma conversão engraçada de strings.
fonte
no objetivo -c é que você deseja exibir o valor flutuante em 2 números decimais e passar o argumento indicando quantos pontos decimais você deseja exibir, por exemplo, 0,02f imprimirá 25,00 0,002f imprimirá 25.000
fonte
Aqui estão alguns métodos para formatar dinamicamente de acordo com uma precisão:
por exemplo
=> 2.3453
=> 2
=> 2,35 (arredondado para cima)
fonte
Outro método para Swift (sem usar o NSString):
PS: esta solução não está funcionando com o tipo CGFloat testado apenas com
Float
&Double
fonte
Use
NSNumberFormatter
commaximumFractionDigits
como abaixo:E você terá
12.35
fonte
Se você também precisar flutuar valor:
fonte
fonte