1

So jetzt habe ich den folgenden Code:Format NSDecimalNumber Währungs durch Ländercode ohne Verlust an Präzision

- (NSString*)convertToLocalCurrencyFormat:(NSDecimalNumber*)result { 
    NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init]; 
    formatter.numberStyle = NSNumberFormatterCurrencyStyle; 
    formatter.currencyCode = self.comparisonCurrency; 
    formatter.usesSignificantDigits = YES; 
    return [formatter stringFromNumber:result]; 
} 

Wenn ich in einem NSDecimalNumber* passieren 678071967196719797153475347466.94627863 enthält, wird es zu ¥678,072,000,000,000,000,000,000,000,000 formatiert (mit dem currencyCode eingestellt auf JPY). Wenn ich die formatter.usesSignificantDigits = YES Zeile weglassen, dann wird es auf ¥678,071,967,196,719,797,153,475,347,467, näher, aber immer noch die dezimalen und folgenden Werte fallen formatiert.

Allerdings, wenn ich in 6780.0416000000012517376 passieren, ist es richtig-¥6,780.04 mit der signifikanten Stellen Zeile formatiert. Es wird auf ¥6,780 ohne die signifikante Ziffernzeile formatiert.

Ich weiß, dass NSNumberFormatter jede NSNumber als Parameter aufnehmen kann, aber nur so genaue Werte wie doubles verarbeiten kann, so dass NSDecimalNumber keine Fehler und falsche Ergebnisse hat.

Wie kann ich NSDecimalNumbers mit Währungscodes ohne Genauigkeitsverlust formatieren?

Dank

Antwort

2

Versuchen Sie, die Mindestbruchstellen Einstellung statt:

formatter.minimumFractionDigits = 2; 

HTH

+0

, der wie ein Charme, danke! –