2011-01-17 3 views
2

Wie erreiche ich das Folgende in objective-c?Runden von ganzen Zahlen - objective-c

Beginnen Sie mit einer Ganzzahl x zwischen 0 und 999.999.999. Und am Ende mit einer Ganzzahl y.

Wenn x zwischen 0 und 9999 ist, dann y = x Andernfalls wird x etwa 45k (entspricht 45.000) oder 998m (entspricht 998 Millionen). Mit anderen Worten, verwenden Sie die Zeichen "k" und "m", um y kleiner als 4 Zeichen zu halten.

Antwort

2

Does Runde nicht aber einfach abschneidet:

NSString *text; 
if (x >= 1000000) text = [NSString stringWithFormat:@"%dm",x/1000000]; 
else if (x >= 1000) text = [NSString stringWithFormat:@"%dk",x/1000]; 
else text = [NSString stringWithFormat:@"%d",x]; 

Rounding Lösung:

NSString *text; 
if (x >= 1000000) text = [NSString stringWithFormat:@"%.0fm",x/1000000.0f]; 
else if (x >= 1000) text = [NSString stringWithFormat:@"%.0fk",x/1000.0f]; 
else text = [NSString stringWithFormat:@"%d",x]; 

Wenn Sie eine größere Präzision möchten, verwenden Sie float und %.1f usw.

+0

wird dies wahrscheinlich Runde? zum Beispiel werden 459.861 460k? – CodeGuy

+0

Nein, es wird abgeschnitten - sollte nicht schwierig sein, es zu runden (verwenden Sie float oder double vor der Division und formatieren Sie mit% 0f). – Eiko

+0

können Sie den Code dafür aktualisieren? Ich bin mir nicht sicher ob ich das verstehe. Vielen Dank! – CodeGuy

2
thousands = x/1000; 
millions = thousands/1000; 
billions = millions/1000; 

if(billions) 
    sprintf(y, "%dB", billions); 
else if(millions) 
    sprintf(y, "%dM", millions); 
else if(thousands) 
    sprintf(y, "%dK", thousands); 
else 
    sprntf(y, "%d", x); 
+1

Ihre Aufgaben sind falsch. – Eiko

+0

was meinst du? – hhafez

+1

Der Modulo-Operator wird nicht Tausende, Millionen und Milliarden geben. Sie müssen die Division verwenden. – Eiko

0
NSString *y = nil; 

// If Billion 
if (x >= 1000000000) y = [NSString stringWithFormat:@"%.0fB", x/1000000000]; 
// If Million 
else if (x >= 1000000) y = [NSString stringWithFormat:@"%.0fM", x/1000000]; 
// If it has more than 4 digits 
else if (x >= 10000) y = [NSString stringWithFormat:@"%.0fK", x/1000]; 
// If 4 digits or less 
else y = [NSString stringWithFormat:@"%d", x]; 

Update: Das fehlende 'else' wurde hinzugefügt, sonst würde es keine Zahlen mit weniger als 4 Ziffern bekommen.

+0

% .0d macht keinen Sinn. Und zählen Sie die Anzahl der Nullen richtig. – Eiko

+0

Was ist das Problem mit den Nullen? 9 für Milliarden, 6 für Millionen, 3 für Tausend? Was vermisse ich? – vfn

+0

Wow ... habe gerade die% .0d gesehen, es sollte% .0f sein, weil ich die Runde entfernt habe. Es ist jetzt bearbeitet, danke! – vfn