NSNumberFormatter的准确性问题

时间:2013-12-26 21:50:23

标签: ios objective-c nsnumber nsnumberformatter

我的问题是我目前正在使用NSNumberFormatter NSNumberFormatterDecimalStyle。我正在使用这个因为我想让逗号分隔每三个数字的数字,就像我把它变成一个字符串时那样。这很好用,但小数位的精度非常小。它只能精确到千分之一的地方。对于我的应用程序,我需要它精确到小数点后12位。我只需将%。12g放在字符串格式中就可以很容易地使用%g格式说明符完成,但我不知道如何使用NSNumberFormatter实现这一点。我尝试删除格式:NSNumberFormatterDecimalStyle,但这只是使我的数字为整数。任何帮助,将不胜感激。

以下是我目前用于格式化double: number

的代码
NSNumber *theNumber = [NSNumber numberWithDouble:number];
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[num setNumberStyle:NSNumberFormatterDecimalStyle];
[num setGroupingSeparator:@","];

2 个答案:

答案 0 :(得分:1)

确保您正在使用的起始值是双倍的,而不是浮点数。

然后,您是否尝试在格式化程序上设置maximumFractionDigits,然后再使用它进行转换?

答案 1 :(得分:0)

只需设置小数点右边的最小值或数字:

- (void)setMinimumFractionDigits:(NSUInteger)number

示例:

NSNumber *number = @123456.654321;
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@","];
[formatter setMinimumFractionDigits:12];
NSString *stringNumber = [formatter stringFromNumber:number];
NSLog(@"Number: '%@'", stringNumber);

NSLog输出

  

编号:'123,456.654321000000'