Ho un valore doppio come 22.368511 Voglio arrotondarlo a 2 cifre decimali. cioè dovrebbe restituire 22.37
Come lo posso fare?
Ho un valore doppio come 22.368511 Voglio arrotondarlo a 2 cifre decimali. cioè dovrebbe restituire 22.37
Come lo posso fare?
Risposte:
Come nella maggior parte delle lingue, il formato è
%.2f
puoi vedere altri esempi qui
Modifica : ho ricevuto anche questo se sei preoccupato per la visualizzazione del punto nei casi di 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:, perché il setFormat:metodo non esisteva (definito solo per Mac), ma comunque - ottima risposta, mi ha risparmiato ore di sperimentazione, quindi +1 e un grande grazie a te :)
È possibile utilizzare il codice seguente per formattarlo con due cifre decimali
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];
È possibile utilizzare la funzione NSDecimalRound
Per rimuovere i decimali dal tuo doppio, dai un'occhiata a questo output
Obj C
double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);
L'output sarà:
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))
L'output sarà:
3.14
3
Stavo per andare con la risposta di Jason ma ho notato che nella mia versione di Xcode (4.3.3) non potevo farlo. così dopo un po 'di ricerca ho scoperto che avevano recentemente cambiato i metodi di classe e rimosso tutti quelli vecchi. quindi ecco come ho dovuto farlo:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
Usa NSNumber * aNumber = [NSNumber numberWithDouble: number]; invece di 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;
}
Per Swift c'è una soluzione semplice se non puoi importare Foundation, usa round () e / o non vuoi una String (di solito il caso quando sei in Playground):
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
risultato: 31.726
Utilizzo la soluzione postata da Umberto Raimondi allungabile tipo Double:
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
Potresti farlo:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);