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?
objective-c
cocoa
cocoa-touch
rksprst
quelle
quelle
Antworten:
Sie können einen NSString mit in einen Double konvertieren
Das Runden auf das nächste int kann dann als erfolgen
Ich bin mir ehrlich gesagt nicht sicher, ob es eine optimierte Möglichkeit gibt, wieder in einen String umzuwandeln als
quelle
[[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 anderenPERIOD
- 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 eineNSNumber
daraus zu erhalten. Wenn Sie Konvertierungsfehler behandeln möchten, können Sie-[NSFormatter getObjectValue:forString:range:error:]
stattdessen verwenden.quelle
Zusätzlich zu olliejs Antwort können Sie von einem int zurück in einen String mit
NSNumber
's konvertierenstringValue
:stringValue
Bei einemNSNumber
Aufruf erhaltendescriptionWithLocale:nil
Sie eine lokalisierte Zeichenfolgendarstellung des Werts. Ich bin mir nicht sicher, ob[NSString stringWithFormat:@"%d",myInt]
Sie eine ordnungsgemäß lokalisierte Darstellung von erhaltenmyInt
.quelle
Die Rundungsmethode von olliej ist für negative Zahlen falsch
Hier ist eine Alternative
Sie können natürlich eine Rundungsfunktion von math.h verwenden
quelle
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".)
quelle
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.quelle
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?
( Packt es als NSNumber ein und konvertiert es mit der Beschreibungsmethode von NSObjects in eine Zeichenfolge. )
quelle
Zum Runden sollten Sie wahrscheinlich die in math.h definierten C-Funktionen verwenden.
Halten Sie die Optionstaste gedrückt und doppelklicken Sie
round
in Xcode. Daraufhin wird die Manpage mit verschiedenen Funktionen zum Runden verschiedener Typen angezeigt.quelle
Dies ist der einfachste Weg, den ich kenne:
quelle
Anhand dieses Beispiels können Sie die Konvertierungen in beide Richtungen sehen:
quelle
Konvertieren Sie den im Textfeld eingegebenen Text in eine Ganzzahl
Rundung auf das nächste Doppel
auf das nächste int runden (nur positive Werte berücksichtigen)
Konvertieren von Double in String
oder
Konvertieren von int in string
oder
quelle
Am Ende habe ich dieses praktische Makro verwendet:
quelle