2013-03-07 19 views
7

Sto provando ad avere una stringa numerica con una precisione massima di 2 decimali, mentre i decimali di riposo vengono tagliati, invece di arrotondarli. Per esempio:Come evitare arrotondamenti in NSNumberFormatter

I have: 123456.9964

I want: 123456.99 -> Just want to trim rest of the decimal places

Quello che ho cercato è:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat: 123456.9964]]; 
NSLog(@"%@", numberAsString); 

Non c'è nulla per impostare la modalità di arrotondamento come "nessuno". Cos'altro posso fare per mantenere la formattazione in stile decimale insieme alle cifre decimali troncate? Qualsiasi aiuto sarà apprezzato. Grazie.

risposta

13

le seguenti opere per me:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
// optional - [numberFormatter setMinimumFractionDigits:2]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
NSNumber *num = @(123456.9964); 
NSString *numberAsString = [numberFormatter stringFromNumber:num]; 
NSLog(@"%@", numberAsString); 

l'output è: 123,456.99

Parte del problema è l'uso di numberWithFloat: invece di numberWithDouble:. Il tuo numero ha troppe cifre per float.

+0

Grazie ha funzionato :) – NightFury

0
[numberFormatter setRoundingMode: NSNumberFormatterRoundDown]; 

Utilizzare questo codice.

+0

Non funziona. Sto ottenendo l'output come: 123457 mentre voglio 123456.99 – NightFury

+0

@AnumAmin In cosa si specificano anche le cifre minime di frazione di 2? – rmaddy

+0

@maddy se specifico le frazioni min come 2 (che è il mio requisito), ottengo ancora 123457.00 – NightFury

1

è possibile utilizzare questo

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble: 123456.9964]]; 
NSLog(@"%@", numberAsString); 
+0

Grazie anche a te ... scusami, posso accettare solo un ans. – NightFury

+0

nessun problema ... :) – Aravindhan

0

si può anche semplicemente usare round() e quindi convertirlo in una stringa dopo

var y = round(100 * 123456.8864)/100 

var x:String = String(format:"%.2f", y) 
println("x: \(x)") 

sarebbe stampare x: 123.456,89, arrotondando il 8 ad un 9

+0

whoops! dimenticato la parte senza arrotondamento. –

Problemi correlati