我正在尝试让NSDecimalNumber打印出大数字,15位或更多位数。在15位数我看到111,111,111,111,111。超过15位数我看到1,111,111,111,111,110,即使格式化的数字是1111111111111111。
说明我的问题的一个例子:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumSignificantDigits:25];
[formatter setUsesSignificantDigits:true];
NSDecimalNumber* test = [NSDecimalNumber decimalNumberWithString:@"12345678901234567890"];
NSString* output = [formatter stringFromNumber:test];
NSLog( @"num value: %@", test );
NSLog( @"str value: %@", output );
输出如下:
2010-09-16 09:24:16.783 SimpleCalc[739:207] num value: 12345678901234567890
2010-09-16 09:24:16.784 SimpleCalc[739:207] str value: 12,345,678,901,234,600,000
我错过了什么愚蠢的事情?
答案 0 :(得分:3)
此处的问题是NSNumberFormatter
内部无法处理NSDecimalNumbers
,它们会转换为double
,您会看到由此导致的精度损失。来自文档:
表示包含整数,浮点数和双精度数;浮点数和双精度数可以格式化为指定的小数位。
您可能应该查看- (NSString *)descriptionWithLocale:(NSDictionary *)locale
上的NSDecimalNumber
方法。
答案 1 :(得分:0)
或NSDecimalString()
。带上NSDecimalNumber
(例如myDecimalNumber
),通过NSDecimal
(decimalValue
)提取NSDecimal decimal = [myDecimalNumber decimalValue]
并使用{{1}创建NSString
功能。