5

NSDecimalNumber に 15 桁以上の大きな数字を出力させようとしています。15 桁では、111,111,111,111,111 と表示されます。フォーマットされている数値が 1111111111111111 であっても、15 桁を超えると 1,111,111,111,111,110 と表示されます。

私の問題を説明する例:

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処理されず、変換され、結果として精度が低下することです。ドキュメントから:NSDecimalNumbersdouble

表現には、整数、浮動小数点数、および倍精度数が含まれます。float と double は、指定された小数点位置にフォーマットできます。

- (NSString *)descriptionWithLocale:(NSDictionary *)localeおそらく、 のメソッドを見ているは​​ずNSDecimalNumberです。

于 2012-03-13T09:06:03.010 に答える