5

我试图让 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

我错过了什么傻事?

4

2 回答 2

3

这里的问题是它NSNumberFormatter没有在NSDecimalNumbers内部处理,它们被转换为double并且您会看到由此导致的精度损失。从文档:

表示包括整数、浮点数和双精度数;浮点数和双精度数可以格式化为指定的小数位。

您可能应该- (NSString *)descriptionWithLocale:(NSDictionary *)localeNSDecimalNumber.

于 2012-03-13T09:06:03.010 回答
1

NSDecimalString()。拿走你的NSDecimalNumber(例如myDecimalNumber),提取NSDecimal通孔decimalValue( )并用函数NSDecimal decimal = [myDecimalNumber decimalValue]创建一个。NSStringNSString *myString = NSDecimalString(decimal)

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/index.html#//apple_ref/c/func/NSDecimalString

于 2014-12-16T00:51:46.700 回答