2010-09-16 7 views
5

Ich versuche NSDecimalNumber zu bekommen, große Zahlen, 15 oder mehr Ziffern auszudrucken. Bei 15 Ziffern sehe ich 111,111,111,111,111. Oberhalb 15 Stellen sehe ich 1.111.111.111.111.110 obwohl die Zahl formatiert 1111111111111111.NSDecimalNumber Runde lange Zahlen

Ein Beispiel ist mein Problem zu veranschaulichen:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumSignificantDigits:25]; 
[formatter setUsesSignificantDigits:true]; 

NSDecimalNumber* test = [NSDecimalNumber decimalNumberWithString:@"123456789"]; 

NSString* output = [formatter stringFromNumber:test]; 
NSLog(@"num value: %@", test); 
NSLog(@"str value: %@", output); 

Und die Ausgabe wie folgt aussieht:

2010-09-16 09:24:16.783 SimpleCalc[739:207] num value: 123456789
2010-09-16 09:24:16.784 SimpleCalc[739:207] str value: 12,345,678,901,234,600,000 

Was für dumme Sache haben Ich vermisste?

Antwort

3

Das Problem hier ist, dass NSNumberFormatter intern nicht behandelt NSDecimalNumbers, sie werden in double konvertiert und Sie sehen den resultierenden Verlust an Genauigkeit. Aus der Dokumentation:

Die Darstellung umfasst Integer, Floats und Doubles; Floats und Doubles können auf eine bestimmte Dezimalstelle formatiert werden.

Sie sollten sich wahrscheinlich die - (NSString *)descriptionWithLocale:(NSDictionary *)locale Methode auf NSDecimalNumber ansehen.