我需要用NSNumberFormatter
. 如果数字很小(例如0.000001
)将以十进制格式显示0.000001
。如果数字很大,许多小数或整数(例如1211345456
或0.000000011111553242
)将以科学计数法显示,1.211 E9
.
我有这段代码(非常糟糕),但对我来说还不够:(。我认为解决方案是-setPositiveFormat
格式模式#,##0.0000000
和0.###E+0
,有什么想法吗?
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];