Tenho um valor duplo de 22,368511 e quero arredondá-lo para 2 casas decimais. ou seja, deve retornar 22,37
Como eu posso fazer isso?
Respostas:
Como na maioria dos idiomas, o formato é
%.2f
você pode ver mais exemplos aqui
Edit : Eu também entendi se você estiver preocupado com a exibição do ponto em casos de 25,00
{
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"0.##"];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34 2010-08-22 15:04:10.616 a.out[6954:903] 25.3 2010-08-22 15:04:10.617 a.out[6954:903] 25
setPositiveFormat:
, porque setFormat:
método não existia (definido apenas para Mac), mas ainda - ótima resposta, me economizou horas de experimentos, então +1 e muito obrigado a vocês :)
Você pode usar o código abaixo para formatá-lo com duas casas decimais
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];
NSLog(@"Result...%@",numberString);//Result 22.37
Swift 4:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up
let str = String(describing: formatter.string(from: 12.2345)!)
print(str)
value = (round(value*100)) / 100.0;
[label setText:@"Value: %.2f", myNumber];
Você pode usar a função NSDecimalRound
Para remover os decimais do seu duplo, dê uma olhada nesta saída
Obj C
double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);
O resultado será:
10.02
10
Swift 2.1 e Xcode 7.2.1
let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))
O resultado será:
3.14
3
Eu ia seguir com a resposta de Jason, mas percebi que em Minha versão do Xcode (4.3.3) não poderia fazer isso. então, depois de um pouco de pesquisa, descobri que eles haviam mudado recentemente os métodos de aula e removido todos os antigos. então aqui está como eu tive que fazer:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
Use NSNumber * aNumber = [NSNumber numberWithDouble: number]; em vez de NSNumber * aNumber = [NSNumber numberWithFloat: number];
+(NSString *)roundToNearestValue:(double)number
{
NSNumber *aNumber = [NSNumber numberWithDouble:number];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setUsesGroupingSeparator:NO];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMinimumFractionDigits:0];
NSString *string = [numberFormatter stringFromNumber:aNumber];
return string;
}
Para o Swift, há uma solução simples se você não puder importar Foundation, use round () e / ou não quer uma String (geralmente é o caso quando você está no Playground):
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
resultado: 31,726
Utilizo a solução postada por Umberto Raimondi estendendo tipo Double:
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
Você poderia fazer isso:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);