Ich muss eine Zahl formatieren mit NSNumberFormatter
. Wenn die Zahl klein ist (z. B. 0.000001
) wird im Dezimalformat angezeigt 0.000001
. Wenn die Zahl groß ist, viele Dezimalstellen hat oder eine ganze Zahl ist (z. B. 1211345456
ou 0.000000011111553242
), wird in wissenschaftlicher Notation angezeigt, 1.211 E9
.
Ich habe diesen Code (sehr schlecht), aber nicht genug für mich: (. Ich denke, die Lösung wäre in -setPositiveFormat
und Formatmuster #,##0.0000000
y 0.###E+0
eine Idee?
NSNumberFormatter *formato = [[NSNumberFormatter alloc] init];
[formato setNumberStyle:NSNumberFormatterDecimalStyle];
[formato setPositiveFormat:@"#,##0.0000000"];
[formato setNegativeFormat:@"-#,##0.0000000"];
[formato setMaximumFractionDigits:7];
[formato setMinimumFractionDigits:0];
[formato setRoundingMode: NSNumberFormatterRoundHalfDown];
NSString *numero = [formato stringFromNumber:[NSNumber numberWithDouble:valor]];
//si vale después de formatear y el valor inicial es distinto de 0 se va de rango,
//por lo tanto usamos notación científica
if([numero isEqualToString:@"0"] && valor != 0){
//inicializamos el objeto de nuevo para que no de problemas con setPositiveFormat
[formato release];
formato = [[NSNumberFormatter alloc] init];
[formato setNumberStyle:NSNumberFormatterScientificStyle];
[formato setMaximumFractionDigits:4];
[formato setRoundingMode: NSNumberFormatterRoundHalfDown];
[formato setExponentSymbol:@"e"];
numero = [formato stringFromNumber:[NSNumber numberWithDouble:valor]] ;
}
[formato release];