Je veux convertir une chaîne en un double et après avoir fait des calculs dessus, la reconvertir en chaîne.
Comment faire cela dans Objective-C?
Existe-t-il également un moyen d'arrondir un double à l'entier le plus proche?
objective-c
cocoa
cocoa-touch
rksprst
la source
la source
Réponses:
Vous pouvez convertir une NSString en double avec
L'arrondi au plus proche int peut alors être fait comme
Honnêtement, je ne suis pas sûr qu'il existe un moyen plus simple de reconvertir en chaîne que
la source
[[NSNumber numberWithInt:myInt] stringValue]
Pour vraiment convertir correctement une chaîne en nombre, vous devez utiliser une instance de
NSNumberFormatter
configuré pour la locale à partir de laquelle vous lisez la chaîne.Différents paramètres régionaux formateront les nombres différemment. Par exemple, dans certaines parties du monde, il
COMMA
est utilisé comme séparateur décimal tandis que dans d'autres, il l'estPERIOD
- et le séparateur des milliers (lorsqu'il est utilisé) est inversé. Sauf quand c'est un espace. Ou pas du tout présent.Cela dépend vraiment de la provenance de l'entrée. La chose la plus sûre à faire est de configurer un
NSNumberFormatter
pour la façon dont votre entrée est formatée et de l'utiliser-[NSFormatter numberFromString:]
pour en obtenir uneNSNumber
. Si vous souhaitez gérer les erreurs de conversion, vous pouvez utiliser à la-[NSFormatter getObjectValue:forString:range:error:]
place.la source
En plus de la réponse d'olliej, vous pouvez convertir un int en une chaîne avec
NSNumber
'sstringValue
:stringValue
sur unNSNumber
appeldescriptionWithLocale:nil
, vous donnant une représentation sous forme de chaîne localisée de value. Je ne sais pas si[NSString stringWithFormat:@"%d",myInt]
vous donnera une représentation correctement localisée demyInt
.la source
La méthode d' arrondi d'olliej est incorrecte pour les nombres négatifs
Voici une alternative
Vous pouvez bien sûr utiliser une fonction d'arrondi de math.h
la source
Voici un exemple de travail de NSNumberFormatter lisant la chaîne de nombres localisés (xCode 3.2.4, osX 10.6), pour économiser aux autres les heures que je viens de passer à déconner. Attention: bien qu'il puisse gérer les espaces de fin tels que "8 765,4", cela ne peut pas gérer les espaces de début et cela ne peut pas gérer les caractères de texte errants. (Chaînes d'entrée incorrectes: "8" et "8q" et "8 q".)
la source
nil
valeurNSNumber*
si elle ne peut pas être analysée. Je ne peux pas reproduire le problème que vous avez rencontré avec les principaux espaces blancs et les caractères de texte errants, l'OMI fonctionne correctement." 28.5 "
parse 28,5, et"gibberish28.5"
,"28.5gibberish"
et"gibberish28.5gibberish"
sont tous Unparseable;" 2 8 . 5. "
est impossible à analyser mais ce n'est pas inhabituel.la source
Pour la conversion d'un nombre en chaîne, que diriez-vous d'utiliser la nouvelle syntaxe littérale (XCode> = 4.4), c'est un peu plus compact.
(Le met en boîte en tant que NSNumber et le convertit en une chaîne en utilisant la méthode de description des NSObjects )
la source
Pour arrondir, vous devriez probablement utiliser les fonctions C définies dans math.h.
Maintenez la touche Option enfoncée et double-cliquez sur
round
Xcode et il vous montrera la page de manuel avec diverses fonctions pour arrondir différents types.la source
C'est le moyen le plus simple que je connaisse:
la source
à partir de cet exemple ici, vous pouvez voir les conversions dans les deux sens:
la source
convertir le texte entré dans le champ de texte en entier
arrondi au double le plus proche
arrondi à l'entier le plus proche (en ne considérant que les valeurs positives)
conversion de double en chaîne
ou
conversion de int en chaîne
ou
la source
J'ai fini par utiliser cette macro pratique:
la source