5

Ho trovato% g per mostrare solo i decimali, se necessario. Se il numero è intero, non viene aggiunto alcun carattere finale .000, quindi è buono. Ma nel caso ad esempio 1.12345, voglio che la risposta sia 1.123. E nel caso di 1.000 voglio mostrare solo 1, come% g già.Uso corretto dello specificatore di formato per mostrare fino a tre decimali, se necessario, altrimenti zero decimali?

Ho provato a specificare% .3g nella stringa, ma non funziona. Se qualcuno ha la risposta, sarei grato!

risposta

2

Cosa si ottiene per NSLog (@ "%. 3g", 1.12345)?

Ho fatto alcuni test e, come ho capito, la tua domanda è sulla buona strada. Questi sono i miei risultati:

NSLog(@"%g", 1.000000); => 1 
NSLog(@"%g", 1.123456789); => 1.12346 
NSLog(@"%.1g", 1.123456789); => 1 
NSLog(@"%.2g", 1.123456789); => 1.1 
NSLog(@"%.3g", 1.123456789); => 1.12 
NSLog(@"%.4g", 1.123456789); => 1.123 

Per ottenere ciò che si desidera utilizzare @ "%. 4g".

+1

Grazie per la risposta, ma ancora non funziona correttamente. –

+1

% .3g non mostrerà i numeri semi grandi, come 100 000. Viene stampato come 1E + 05, che non è l'ideale: D % .3f sembra adattarsi al meglio, ma lascia sempre zero finali quando su un numero intero ? .. :( –

+0

come dovrei ottenere 123456,1234 stampato come 123.456,12, nonché 123.456,00 stampato come 123456 due decimali, solo quando necessario .. –

11

Ho rivisto le capacità di una "stringa di formato" tramite IEEE Specification e, a quanto ho capito, il tuo comportamento desiderato non è possibile.

Si consiglia di utilizzare la classe NSNumberFormatter. Ho scritto un esempio che corrisponde al tuo comportamento desiderato. Mi auguro che aiuta:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setDecimalSeparator:@"."]; 
[numberFormatter setGroupingSeparator:@""]; 
NSString *example1 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.1234]]; 
NSLog(@"%@", example1); 
NSString *example2 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.00]]; 
NSLog(@"%@", example2); 
+0

gen Weinkauff -? Grazie mille Incredibile che ci sono persone in giro come! tu, disposto a usare il tuo tempo per trovare le risposte per gli altri! –

+0

+1 per investigare sulle specifiche IEEE. –

0

Ecco la soluzione di Jan per Swift 4:

let numberFormatter = NumberFormatter() 
numberFormatter.numberStyle = .decimal 
numberFormatter.maximumFractionDigits = 2 
numberFormatter.decimalSeparator = "." 
numberFormatter.groupingSeparator = "" 
let example1 = numberFormatter.string(from: 123456.1234)! 
print(example1) 
let example2 = numberFormatter.string(from: 123456.00)! 
print(example2) 
Problemi correlati