Ich muss einen Gleitkommawert in einem Bereich mit begrenzter Breite am effizientesten drucken. Ich verwende ein NSNumberFormatter
, und ich setze zwei Zahlen nach dem Dezimalpunkt als Standard, so dass, wenn ich eine Zahl wie 234.25
habe, es wie folgt gedruckt wird: 234.25
. Aber wenn ich 1234.25
habe, möchte ich, dass es gedruckt wird als: 1234.3
, und 11234.25
sollte gedruckt werden 11234
.
Ich brauche maximal zwei Ziffern hinter dem Punkt und maximal fünf Ziffern insgesamt, wenn ich Ziffern nach dem Punkt habe, aber es sollte auch mehr als fünf Ziffern drucken, wenn der ganzzahlige Teil mehr hat.
Ich sehe keine Möglichkeit, die Gesamtzahl der Ziffern in NSNumberFormatter
zu begrenzen. Bedeutet das, dass ich meine eigene Funktion schreiben sollte, um Zahlen auf diese Weise zu formatieren? Wenn ja, was ist der richtige Weg, um die Anzahl der Ziffern in den ganzzahligen und gebrochenen Teilen einer Zahl zu erhalten? Ich würde auch lieber mit CGFLoat
arbeiten als mit NSNumber
, um zusätzliche Typumwandlungen zu vermeiden.
So habe ich das in meinem Code implementiert. Ich weiß nicht, wie effizient es ist, ich hoffe nicht schlecht.
Also erstelle ich einen globalen NSNumberFormatter
%Vor%und initialisiere es irgendwo:
%Vor%Dann formatiere ich die Nummer mit der folgenden Funktion:
%Vor% Sie suchen nach einer Kombination aus "höchstwertigen Ziffern" und "maximalen Bruchzahlen" sowie einem bestimmten Rundungsverhalten. NSNumberFormatter
entspricht der Aufgabe:
Ergebnis:
2012-04-26 16: 32: 04.481 SignificantDigits [11565: 707] 234.25
2012-04-26 16: 32: 04.482 SignificantDigits [11565: 707] 1234.3
2012-04-26 16: 32: 04.483 SignificantDigits [11565: 707] 11235
Ist das ein Fehler bei der Verwendung von maximumFractionDigits
und maximumSignificantDigits
zusammen auf NSNumberForamtter
auf iOS 8?
Es funktioniert gut, wenn ich nur maximumFractionDigits
NSNumberFormatter-Fehler maximumFractionDigits und maximumSignificantDigits
Tags und Links objective-c cocoa-touch decimal-point nsnumberformatter