Faça um float mostrar apenas duas casas decimais

Eu tenho o valor 25.00 em um float , mas quando eu imprimi-lo na canvas é 25.0000000 .
Como posso exibir o valor com apenas duas casas decimais?

Não é uma questão de como o número é armazenado, é uma questão de como você está exibindo. Ao convertê-lo em uma string, você deve arredondar para a precisão desejada, que no seu caso tem duas casas decimais.

Por exemplo:

 NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; 

%.02f informa ao formatador que você estará formatando um float ( %f ) e que deve ser arredondado para dois locais e deve ser preenchido com 0 s.

Por exemplo:

 %f = 25.000000 %.f = 25 %.02f = 25.00 

Aqui estão algumas correções

 //for 3145.559706 

Swift 3

 let num: CGFloat = 3145.559706 print(String(format: "%f", num)) = 3145.559706 print(String(format: "%.f", num)) = 3145 print(String(format: "%.1f", num)) = 3145.6 print(String(format: "%.2f", num)) = 3145.56 print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f" print(String(format: "%.3f", num)) = 3145.560 print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f" 

Obj-C

 @"%f" = 3145.559706 @"%.f" = 3146 @"%.1f" = 3145.6 @"%.2f" = 3145.56 @"%.02f" = 3145.56 // which is equal to @"%.2f" @"%.3f" = 3145.560 @"%.03f" = 3145.560 // which is equal to @"%.3f" 

e assim por diante…

Você também pode tentar usar NSNumberFormatter:

 NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease]; nf.positiveFormat = @"0.##"; NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]]; 

Talvez seja necessário definir também o formato negativo, mas acho que é inteligente o suficiente para descobrir isso.

Em Swift Language, se você quiser mostrar, é necessário usá-lo desta maneira. Para atribuir um valor duplo no UITextView, por exemplo:

 let result = 23.954893 resultTextView.text = NSString(format:"%.2f", result) 

Se você quer mostrar em LOG como o objective-c usando NSLog (), então no Swift Language você pode fazer assim:

 println(NSString(format:"%.2f", result)) 

Fiz uma extensão rápida com base nas respostas acima

 extension Float { func round(decimalPlace:Int)->Float{ let format = NSString(format: "%%.%if", decimalPlace) let string = NSString(format: format, self) return Float(atof(string.UTF8String)) } } 

uso:

 let floatOne:Float = 3.1415926 let floatTwo:Float = 3.1425934 print(floatOne.round(2) == floatTwo.round(2)) // should be true 

Na object-c, se você está lidando com matrizes de caracteres regulares (em vez de pointers para NSString), você também pode usar:

 printf("%.02f", your_float_var); 

OTOH, se o que você deseja é armazenar esse valor em uma matriz de caracteres que você pode usar:

 sprintf(your_char_ptr, "%.02f", your_float_var); 

O problema com todas as respostas é que multiplicar e depois dividir resulta em problemas de precisão porque você usou a divisão. Eu aprendi isso há muito tempo de programação em um PDP8. A maneira de resolver isso é:

 return roundf(number * 100) * .01; 

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ê quer é com você. Apenas não divida o produto, multiplique-o pelo equivalente decimal. Nenhuma conversão de seqüência de caracteres engraçada é necessária.

no objective -c é você deseja exibir o valor float em 2 números decimais e depois passar o argumento indicando quantos pontos decimais você deseja exibir, por exemplo, 0.02f irá imprimir 25.00 0.002f irá imprimir 25.000

Aqui estão alguns methods para formatar dinamicamente de acordo com uma precisão:

 + (NSNumber *)numberFromString:(NSString *)string { if (string.length) { NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; f.numberStyle = NSNumberFormatterDecimalStyle; return [f numberFromString:string]; } else { return nil; } } + (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision { NSNumber *numberValue = [self numberFromString:string]; if (numberValue) { NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision]; return [NSString stringWithFormat:formatString, numberValue.floatValue]; } else { /* return original string */ return string; } } 

por exemplo

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4]; 

=> 2,3453

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0]; 

=> 2

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2]; 

=> 2,35 (arredondado para cima)

Outro método para Swift (sem usar NSString):

 let percentage = 33.3333 let text = String.localizedStringWithFormat("%.02f %@", percentage, "%") 

PS esta solução não está funcionando com o tipo CGFloat só testado com Float & Double

Use maximumFractionDigits com maximumFractionDigits como abaixo:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.maximumFractionDigits = 2; NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]); 

E você vai ter 12.35

Se você precisar também de um valor flutuante:

 NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; float floatTwoDecimalDigits = atof([formattedNumber UTF8String]); 
  lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]];