Мне нужно отформатировать число с NSNumberFormatter. Если число маленькое (например, 0,000001) будет отображаться в десятичном формате, 0,000001. Если число большое, многие десятичные или целые числа (например, 1211345456 o 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];