2013-03-15 8 views
10

Lassen Sie mich wissen, wie Dezimal für 2 Dezimalstellen in Objective-C runden.Wie Sie Dezimal für 2 Dezimalstellen in Objective-C runden

Ich möchte so etwas tun. (alle Zahlen folgender Satz float-Wert)

• Runde

10.118 => 10,12

10,114 => 10.11

• ceil

10.118 => 10,12

• Boden

10.114 => 10.11

Danke für die Überprüfung meiner Frage.

+3

Sie tun es genauso wie in C :) – dasblinkenlight

+0

Benötigen Sie die resultierenden Werte als Strings oder Floats? – coverback

+0

http://stackoverflow.com/questions/10749483/how-to-convert-a-float-value-to-rounded-off-in-iphone-app/10749620#10749620 –

Antwort

28

Wenn Sie die Nummer tatsächlich benötigen abgerundet, und zwar nicht nur, wenn präsentiert es:

float roundToN(float num, int decimals) 
{ 
    int tenpow = 1; 
    for (; decimals; tenpow *= 10, decimals--); 
    return round(tenpow * num)/tenpow; 
} 

Oder immer auf zwei Dezimalstellen:

float roundToTwo(float num) 
{ 
    return round(100 * num)/100; 
} 
+0

Ähm, das geht bei mir nicht. Es gibt mir einen Schwimmer mit sechs Dezimalstellen. –

+2

@TheJuicedWord: Der korrekte NSLog/printf Conversion-Spezifizierer muss natürlich '% .2f' sein. –

+1

@ user529758 aber das geht immer noch nicht die Tatsache an, dass der tatsächliche 'float' _nicht_ ordnungsgemäß gerundet ist. –

0
float roundedFloat = (int)(sourceFloat * 100 + 0.5)/100.0; 
+0

Dies ist nicht korrekt für negative Zahlen. Es gibt eine 'round()' -Funktion in der C-Standardbibliothek. –

+0

Richtig, aber: 1. Im Beispiel gab es nur positive Zahlen, 2.Mein Ziel war es nur die Idee zu zeigen;) – Gobra

+1

Ich sehe deinen Standpunkt, aber das ist nicht die Idee. * Sorry. –

9

Sie die unten verwenden Code, um es auf zwei Dezimalstellen zu formatieren

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.numberStyle = NSNumberFormatterDecimalStyle; 
formatter.setMaximumFractionDigits = 2; 
formatter.setRoundingMode = NSNumberFormatterRoundUp; 

NSString *numberString = [formatter stringFromNumber:@(10.358)]; 
NSLog(@"Result %@",numberString); // Result 10.36 
+0

Ich denke OP will * eigentlich * die Nummer runden. –

+0

gemäß von @Takuya gegebenen Bedingung (10.118 => 10,12 10,114 => 10.11 • ceil 10.118 => 10,12 • Boden 10,114 => 10.11) Ich denke, das für ihn arbeiten sollte. – Suhaiyl

+0

Ich meine, er will keinen runden Wert * sondern * einen * gerundeten Wert * ausgeben lassen. –

Verwandte Themen