Ich versuche, eine Zahlenrundung und Konvertierung in eine Zeichenfolge durchzuführen, um die Ausgabe in einem Objective-C-Programm zu verbessern.
Ich habe einen Gleitkommawert, den ich auf die nächste 0,5 runden und dann verwenden möchte, um den Text auf einer Beschriftung festzulegen.
Zum Beispiel:
1.4 wäre eine Zeichenfolge von: 1.5
1.2 wäre eine Zeichenfolge von: 1
0,2 wäre eine Zeichenfolge von: 0
Ich habe eine Weile bei Google nach einer Antwort gesucht, aber als Neuling bei Objective-C bin ich mir nicht sicher, wonach ich suchen soll! Ich würde mich also sehr über einen Zeiger in die richtige Richtung freuen!
Danke, Ash
Antworten:
Vielen Dank für die Hinweise an alle, ich habe es geschafft, eine Lösung zu finden:
float roundedValue = round(2.0f * number) / 2.0f; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:1]; [formatter setRoundingMode: NSNumberFormatterRoundDown]; NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]]; [formatter release];
Das Obige funktioniert für die Testfälle, die ich darauf geworfen habe, aber wenn jemand einen besseren Weg dazu kennt, wäre ich interessiert, es zu hören!
quelle
float floatVal = 1.23456;
Rundung
int roundedVal = lroundf(floatVal); NSLog(@"%d",roundedVal);
Aufrunden
int roundedUpVal = ceil(floatVal); NSLog(@"%d",roundedUpVal);
Abrunden
int roundedDownVal = floor(floatVal); NSLog(@"%d",roundedDownVal);
quelle
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
quelle
Verwenden Sie lroundf (), um einen Float in eine Ganzzahl zu runden und die Ganzzahl dann in eine Zeichenfolge umzuwandeln.
quelle
lroundf()
rundet einen Float auf eine ganze Zahl und gibt ihn als lange Ganzzahl zurück (um ihn in eine Zeichenfolge umzuwandeln, die Sie verwenden könnenstringWithFormat:
).NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];
quelle
Ich würde empfehlen, NSNumberFormatter zu verwenden .
quelle
ein einfacher Weg:
float theFloat = 1.23456; int rounded = roundf(theFloat); NSLog(@"%d",rounded); int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); // Note: int can be replaced by float
quelle
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];
quelle
Die folgende Technik arbeitete für mich in einer Finanzanwendung.
NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated]; monthlyPaymentCalculated=[dd doubleValue]; self.monthlyPaymentCritical=monthlyPaymentCalculated;
Zuerst wurde es mit% 0.2f gerundet und in NSString gespeichert. Dann habe ich es einfach wieder in double konvertiert und das Ergebnis war gut für meine Berechnung.
quelle
Ich musste in der Lage sein, auf eine bestimmte Ziffer zu runden (nicht unbedingt auf ganze ganze Zahlen). Ich habe eine
NSNumber
Kategorie erstellt (basierend auf Ashs Antwort ) und die folgende Methode hinzugefügt:- (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode toPositionRightOfDecimal:(NSUInteger)position { NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:position]; [formatter setRoundingMode:roundingMode]; NSString *numberString = [formatter stringFromNumber:self]; return numberString; }
Was mir erlaubt, es so zu benutzen:
[aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2];
Ich kann es verwenden, um auf ganze Zahlen zu runden, indem ich
0
als zweiten Parameter übergebe:[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];
quelle
Mit diesen Funktionen können Sie auf einen beliebigen Wert runden. Wenn Sie p = 2 verwenden, erhalten Sie gerade Zahlen.
float RoundTo(float x, float p) { float y = 1/p; return int((x+(1/(y+y)))*y)/y; } float RoundUp(float x, float p) { float y = 1/p; return int((x+(1/y))*y)/y; } float RoundDown(float x, float p) { float y = 1/p; return int(x*y)/y; }
quelle