web-dev-qa-db-ger.com

Rundungszahlen in Ziel-C

Ich versuche, einige Zahlen zu runden und in eine Zeichenfolge zu konvertieren, um die Ausgabe in einem Objective-C-Programm zu verbessern. 

Ich habe einen Float-Wert, den ich auf die nächste .5 runden möchte, um dann den Text auf einem Etikett 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 nach einer Antwort bei Google gesucht, aber als Noob mit Objective-C bin ich nicht sicher, wonach ich suchen soll! Ich würde mich also wirklich über einen Zeiger in die richtige Richtung freuen!

Danke, Ash

73
Ash

Danke für die Hinweise, 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 warf, aber wenn jemand einen besseren Weg kennt, wäre ich interessiert, es zu hören!

98
Ash
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);
37
Durai Amuthan.H
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
32
keremk

Verwenden Sie lroundf (), um ein Float auf eine Ganzzahl zu runden und die Ganzzahl in eine Zeichenfolge zu konvertieren.

24
Osos
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];
11
Simpu

Ich würde empfehlen, mit NSNumberFormatter zu suchen.

8
hbw

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
5
Lal Krishna

Folgende Technik hat für mich in einer Finanzanwendung gearbeitet.

 NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated];

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

das, was gemacht wird, ist zuerst mit% 0.2f abgerundet und in NSString gespeichert, dann habe ich es einfach noch einmal in ein Double konvertiert und das Ergebnis war gut für meine Berechnung.

2
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];

Mit diesen Funktionen können Sie auf einen beliebigen Wert aufrunden. 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;
}
1
JJussi

Ich musste in der Lage sein, auf eine bestimmte Ziffer zu runden (nicht unbedingt auf ganze Zahlen). Ich habe eine NSNumber-Kategorie (basierend auf Antwort von Ash ) erstellt 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 erlaubt es mir, 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];
0
Stunner