Arredondamento de números em Objective-C

Eu estou tentando fazer alguns arredondamento de número e conversão para uma seqüência de caracteres para melhorar a saída em um programa de Objective-C.

Eu tenho um valor float que gostaria de arredondar para o próximo. 5 e, em seguida, usá-lo para definir o texto em um label.

Por exemplo:

1.4 seria uma string de: 1.5

1.2 seria uma string de: 1

0.2 seria uma string de: 0

Eu passei um tempo olhando no Google para uma resposta, mas, sendo um noob com Objective-C, eu não sei o que procurar! Então, eu realmente aprecio um ponteiro na direção certa!

Obrigado Ash

Obrigado pelos pointers todos, eu consegui chegar a uma solução:

float roundedValue = round(2.0f * number) / 2.0f; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:1]; [formatter setRoundingMode: NSNumberFormatterRoundDown]; NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]]; [formatter release]; 

O acima funciona para os casos de teste que eu joguei para ele, mas se alguém sabe uma maneira melhor de fazer isso eu estaria interessado em ouvi-lo!

 float floatVal = 1.23456; 

Arredondamento

 int roundedVal = lroundf(floatVal); NSLog(@"%d",roundedVal); 

Arredondamento para cima

 int roundedUpVal = ceil(floatVal); NSLog(@"%d",roundedUpVal); 

Arredondando para baixo

 int roundedDownVal = floor(floatVal); NSLog(@"%d",roundedDownVal); 
 NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f]; 

Use lroundf () para arredondar um float para inteiro e então converta o inteiro para uma string.

 NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)]; 

Eu recomendo investigar usando NSNumberFormatter .

uma maneira simples:

 float theFloat = 1.23456; int rounded = roundf(theFloat); NSLog(@"%d",rounded); int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); // Note: int can be replaced by float 
 NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber]; 

Seguinte Técnica trabalhou para mim em uma aplicação financeira.

  NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated]; monthlyPaymentCalculated=[dd doubleValue]; self.monthlyPaymentCritical=monthlyPaymentCalculated; 

O que é feito é primeiro é arredondado com% 0.2f e armazenado em NSString então eu simplesmente converti-lo novamente em dobro e resultado foi bom para o meu cálculo.

Com estas funções você pode arredondar para qualquer valor. Se você usa p = 2, você obtém números pares.

 float RoundTo(float x, float p) { float y = 1/p; return int((x+(1/(y+y)))*y)/y; } float RoundUp(float x, float p) { float y = 1/p; return int((x+(1/y))*y)/y; } float RoundDown(float x, float p) { float y = 1/p; return int(x*y)/y; } 

Eu precisava ser capaz de arredondar para um dígito específico (não necessariamente para inteiros inteiros). Fiz uma categoria NSNumber (com base na resposta de Ash ) e adicionei o seguinte método a ela:

 - (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode toPositionRightOfDecimal:(NSUInteger)position { NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:position]; [formatter setRoundingMode:roundingMode]; NSString *numberString = [formatter stringFromNumber:self]; return numberString; } 

O que me permite usá-lo assim:

 [aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2]; 

Eu posso usá-lo para arredondar para números inteiros, passando em 0 como o segundo parâmetro:

 [aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];