2017-08-15 2 views
2

Nehmen wir an, ich habe ein NSNumber Objekt, das einen Wert 0.12345 enthält. Alles, was ich will, ist ein NSNumber Objekt mit einem gleichen Wert, aber auf eine bestimmte Anzahl von signifikanten Ziffern gerundet, sagen wir 2, so sieht der Wert so aus: 0.12.Round NSNumber zu einer bestimmten Anzahl von signifikanten Ziffern

manuell Multiplikation/Division zu tun

Gibt es einen offensichtlichen Weg, den ich vermisse?

+1

'NSNumber' hat keine integrierten Rundungsfunktionen. Sie könnten 'NSDecimalNumber' verwenden, was funktioniert. – dan

+3

Erklären Sie Ihr Ziel ein bisschen mehr. Warum müssen Sie die 'NSNummer' runden? – rmaddy

+2

"Ich würde es vorziehen, nicht zu ..." - erklären, warum Sie nicht ein mathematisches Problem mit Mathematik lösen wollen. Es gibt viele Antworten in deiner verknüpften Frage, die von schlecht bis gut reichen (die Punkte werden dabei helfen). – CRD

Antwort

2

Es ist ziemlich unmöglich, es zu tun und alle Ihre Beschränkungen beizubehalten. NSNumber hat keine Rundungsmethoden, Sie müssen also zu etwas anderem konvertieren. Der offensichtliche Weg ist, sich zu verdoppeln und zu multiplizieren, zu runden und zu teilen, aber Sie sagen, dass Sie das lieber nicht tun würden. So lässt, dass diese Route:

NSNumber *round(NSNumber *number, NSInteger places, NSRoundingMode mode) { 
    NSDecimal d = number.decimalValue; 
    NSDecimal rd; 
    NSDecimalRound(&rd, &d, places, mode); 
    return [NSDecimalNumber decimalNumberWithDecimal:rd]; 
} 
+1

Das ist das nächste was ich dachte, danke – C0D3LIC1OU5

-1

Ein weiterer Hacky Weg ist:

  1. Konvertieren Sie Ihre Nummer zu Runde nach multipliziert es von 100.

int yourNum = 0,12345 * 100; yourNum jetzt ist 12.

  1. Dann, wenn Sie die Nummer benötigen nur teilen von 100.

float yourNumF = yourNum/100,0;

Kein Fan dieser Methode selbst aber es passt zu Ihrer Anforderung. : D

Verwandte Themen