Ich versuche, große Währungs Zahlen wie folgt zu formatieren:Wie kann ich das Runden von iPhone NSNumberFormatter verhindern?
NSNumber *testVal = [NSDecimalNumber decimalNumberWithString: @"999999999999999993.00"];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMaximumIntegerDigits:19];
[formatter setMaximumFractionDigits:0];
NSNumberFormatter *formatter = [Formatters numberFormatterForField:f];
NSLog([formatter stringFromNumber:testVal]);
für einen Moment die Wirkung von Locale Ignorieren, finde ich, dass ich die folgende Ausgabe unabhängig von der Rundung konsequent erhalten:
1,000,000,000,000,000,000
erwarte ich:
999,999,999,999,999,993
ich habe versucht, die Rundung ohne Wirkung zu ändern. Warum besteht NSNumberFormatter
auf Abrundung?
Eigentlich in meinem ursprünglichen Code bin ich ein Doppel gegeben und brauche das zu formatieren. Ich hatte gerade versucht, NSDecimalNumber zu versuchen, um zu sehen, ob es einen Unterschied machte (und es nicht tut). Ich denke, es gibt keine Möglichkeit, diesen Präzisionsverlust zu vermeiden, wenn NSNumberFormatter von einem Double in eine Zeichenfolge konvertiert? – thrusty
Doubles haben nur ungefähr 17-18 Dezimalstellen der Genauigkeit, mit zu beginnen: http://cboard.cprogramming.com/c-programming/93742-extended-vs-double-precision.html NSNumberFormatter kann nicht die Information wieder herstellen, die bereits verloren worden ist – rpetrich