Iphone 如何使用NSNumberFormatter根据长度以小数或科学样式格式化数字?
我需要使用Iphone 如何使用NSNumberFormatter根据长度以小数或科学样式格式化数字?,iphone,objective-c,nsnumberformatter,Iphone,Objective C,Nsnumberformatter,我需要使用NSNumberFormatter格式化一个数字。如果数字较小(例如0.000001),则将以十进制格式显示0.000001。如果数字较大,则许多十进制或整数(例如1211345456或0.0000000 11111 553242)将以科学记数法显示,1.211 E9 我有这样的代码(非常糟糕),但对我来说还不够:(.我想解决方案应该是-setPositiveFormat和格式模式、#0.0000000和0.##E+0,知道吗 NSNumberFormatter *formato =
NSNumberFormatter
格式化一个数字。如果数字较小(例如0.000001
),则将以十进制格式显示0.000001
。如果数字较大,则许多十进制或整数(例如1211345456
或0.0000000 11111 553242
)将以科学记数法显示,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];
您可以在发布之前测试数字,并根据其大小更改数字:
if (fabs(number)>10e7 || fabs(number)<10e-7) {
[self.formatter setNumberStyle:NSNumberFormatterScientificStyle];
}
else
[self.formatter setNumberStyle:NSNumberFormatterDecimalStyle];
if(fabs(number)>10e7 | | fabs(number)下面的代码对我有用
- (NSString *)checkAndConvertNumberFormat:(NSString *)numString {
NSRange range = [numString rangeOfString:@" "];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setPositiveFormat:@"#,##0.0000000"];
[formatter setNegativeFormat:@"-#,##0.0000000"];
[formatter setMaximumFractionDigits:7];
[formatter setMinimumFractionDigits:0];
[formatter setRoundingMode: NSNumberFormatterRoundHalfDown];
NSNumber *numberFromString;
if (range.location == NSNotFound) {
range = [numString rangeOfString:@","];
if (([numString length]-range.location) == DECIMAL_POSITION) {
NSLog(@"Comma notation");
[formatter setGroupingSeparator:@"."];
[formatter setDecimalSeparator:@","];
}
NSLog(@"%d", [numString length]-range.location);
range = [numString rangeOfString:@"."];
if (([numString length]-range.location) == DECIMAL_POSITION) {
NSLog(@"Dot notation");
[formatter setGroupingSeparator:@","];
[formatter setDecimalSeparator:@"."];
numberFromString = [formatter numberFromString:numString];
}
NSLog(@"%d", [numString length]-range.location);
} else {
NSLog(@"Space Notation");
[formatter setGroupingSeparator:@" "];
[formatter setDecimalSeparator:@","];
numberFromString = [formatter numberFromString:numString];
}
numberFromString = [formatter numberFromString:numString];
[formatter setGroupingSeparator:@""]; // Whatever you want here
[formatter setDecimalSeparator:@"."]; // Whatever you want here
return [formatter stringFromNumber:numberFromString];
}