Ich möchte einen String in einen Double konvertieren und ihn nach einigen Berechnungen wieder in einen String konvertieren.
Wie mache ich das in Objective-C?
Gibt es eine Möglichkeit, ein Double auch auf die nächste Ganzzahl zu runden?
Ich möchte einen String in einen Double konvertieren und ihn nach einigen Berechnungen wieder in einen String konvertieren.
Wie mache ich das in Objective-C?
Gibt es eine Möglichkeit, ein Double auch auf die nächste Ganzzahl zu runden?
Antworten:
Sie können einen NSString mit in einen Double konvertieren
double myDouble = [myString doubleValue];
Das Runden auf das nächste int kann dann als erfolgen
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
Ich bin mir ehrlich gesagt nicht sicher, ob es eine optimierte Möglichkeit gibt, wieder in einen String umzuwandeln als
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
[[NSNumber numberWithInt:myInt] stringValue]
Um wirklich von einer Zeichenfolge in eine Zahl zu konvertieren, müssen Sie eine Instanz NSNumberFormatter
verwenden, die für das Gebietsschema konfiguriert ist, aus dem Sie die Zeichenfolge lesen.
Verschiedene Gebietsschemas formatieren Zahlen unterschiedlich. In einigen Teilen der Welt COMMA
wird es beispielsweise als Dezimaltrennzeichen verwendet, in anderen PERIOD
- und das Tausendertrennzeichen (wenn verwendet) wird umgekehrt. Außer wenn es ein Raum ist. Oder überhaupt nicht anwesend.
Es hängt wirklich von der Herkunft des Inputs ab. Am sichersten ist es, eine NSNumberFormatter
für die Art und Weise zu konfigurieren, wie Ihre Eingabe formatiert ist, und sie zu verwenden -[NSFormatter numberFromString:]
, um eine NSNumber
daraus zu erhalten. Wenn Sie Konvertierungsfehler behandeln möchten, können Sie -[NSFormatter getObjectValue:forString:range:error:]
stattdessen verwenden.
Zusätzlich zu olliejs Antwort können Sie von einem int zurück in einen String mit NSNumber
's konvertieren stringValue
:
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
Bei einem NSNumber
Aufruf erhalten descriptionWithLocale:nil
Sie eine lokalisierte Zeichenfolgendarstellung des Werts. Ich bin mir nicht sicher, ob [NSString stringWithFormat:@"%d",myInt]
Sie eine ordnungsgemäß lokalisierte Darstellung von erhalten myInt
.
Die Rundungsmethode von olliej ist für negative Zahlen falsch
Hier ist eine Alternative
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
Sie können natürlich eine Rundungsfunktion von math.h verwenden
Hier ist ein Arbeitsbeispiel von NSNumberFormatter, das die lokalisierte Nummer String (xCode 3.2.4, osX 10.6) liest, um anderen die Stunden zu ersparen, die ich gerade damit verbracht habe, herumzuspielen. Achtung: Während es nachfolgende Leerzeichen wie "8.765,4" verarbeiten kann, kann dies keine führenden Leerzeichen und keine streunenden Textzeichen verarbeiten. (Falsche Eingabezeichenfolgen: "8" und "8q" und "8 q".)
NSString *tempStr = @"8,765.4";
// localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
// next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial
NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'",
tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release]; // good citizen
nil
Wert zurück, NSNumber*
wenn er nicht analysiert werden kann. Ich kann das Problem, das Sie mit führenden Leerzeichen und streunenden Textzeichen hatten, nicht reproduzieren. IMO funktioniert es ordnungsgemäß. " 28.5 "
parst als 28,5, und "gibberish28.5"
, "28.5gibberish"
und "gibberish28.5gibberish"
sind alle unparseable; " 2 8 . 5. "
ist nicht analysierbar, aber das ist nicht ungewöhnlich.
// Converting String in to Double
double doubleValue = [yourString doubleValue];
// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal
// Converting double to int
int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];
Wie wäre es mit der Verwendung der neuen Literal-Syntax (XCode> = 4.4) für die Konvertierung von einer Zahl in eine Zeichenfolge, die etwas kompakter ist?
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
( Packt es als NSNumber ein und konvertiert es mit der Beschreibungsmethode von NSObjects in eine Zeichenfolge. )
Zum Runden sollten Sie wahrscheinlich die in math.h definierten C-Funktionen verwenden.
int roundedX = round(x);
Halten Sie die Optionstaste gedrückt und doppelklicken Sie round
in Xcode. Daraufhin wird die Manpage mit verschiedenen Funktionen zum Runden verschiedener Typen angezeigt.
Dies ist der einfachste Weg, den ich kenne:
float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
Anhand dieses Beispiels können Sie die Konvertierungen in beide Richtungen sehen:
NSString *str=@"5678901234567890";
long long verylong;
NSRange range;
range.length = 15;
range.location = 0;
[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];
NSLog(@"long long value %lld",verylong);
Konvertieren Sie den im Textfeld eingegebenen Text in eine Ganzzahl
double mydouble=[_myTextfield.text doubleValue];
Rundung auf das nächste Doppel
mydouble=(round(mydouble));
auf das nächste int runden (nur positive Werte berücksichtigen)
int myint=(int)(mydouble);
Konvertieren von Double in String
myLabel.text=[NSString stringWithFormat:@"%f",mydouble];
oder
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
Konvertieren von int in string
myLabel.text=[NSString stringWithFormat:@"%d",myint];
oder
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];