Conversion de chaine en double - Pb de séparateur
LeChatNoir
Membre, Modérateur
Slt,
Je charge des taux de change à partir d'un fichier.
Ces taux sont récupérer dans un premier temps dans une NSString et sont du style 1.23 ou 2.32.
Mais y a certaines devises dont le taux dépasse 999. Et là , on a une chaine du style 1,236.23 ou la virgule est le séparateur de milliers.
Quand je fais un floatValue, ca me vire tout ce qui est derrière la virgule... Pourtant dans les prefs par défaut, la virgule est bien le séparateur de milliers...
J'ai regardé NSScanner et NSFormater mais j'ai l'impression que ça va pas m'aider...
Y a til une solution imple ou faut il faire péter cette virgule à la mimine ?
Je charge des taux de change à partir d'un fichier.
Ces taux sont récupérer dans un premier temps dans une NSString et sont du style 1.23 ou 2.32.
Mais y a certaines devises dont le taux dépasse 999. Et là , on a une chaine du style 1,236.23 ou la virgule est le séparateur de milliers.
Quand je fais un floatValue, ca me vire tout ce qui est derrière la virgule... Pourtant dans les prefs par défaut, la virgule est bien le séparateur de milliers...
J'ai regardé NSScanner et NSFormater mais j'ai l'impression que ça va pas m'aider...
Y a til une solution imple ou faut il faire péter cette virgule à la mimine ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
-(NSString *)recupererChaine:(NSString *)source epurerDuPremier:(char)caracteresrencontre
{
NSRange range=source stringByTrimmingCharactersInSet:[NSCharacterSet <br /> whitespaceCharacterSet rangeOfString:@,];
if (range.location==NSNotFound)
{return source;}
//Sinon, on a trouvé, donc on vire
return source substringToIndex:range.location] stringByAppendingString:<br /> [source substringFromIndex:range.location+1;
}
Mais il doit y avoir mieux non ?
Qqu'un a-t-il la solution ?
en java je sais faire:
l'équivalent en carbon pourrait être ça:
CFNumberFormatterGetValueFromString
[edit]
une piste en cocoa NSNumberFormatter mais j'suis pas sûr
Good luck ;D
ouais super les nouveaux smileys <br />
;D :kicking:
.
Les objets de classe NSFormatter sont fait pour interagir avec des NSCell ou NSControl, donc je pense pas que ça puisse être utilisable dans son cas...
Le problème est qu'ici la conversion de la NSString en NSDecimalNumber risque de donner quelque chose d'inadapté, avec la virgule et le point en même temps dans la string, mais en effet ca vaut le coup d'être essayé.
Sinon il y a NSCharacterSet et NSMutableCharacterSet, qui permettent d'autres types d'opérations sur les strings....
bien vu !
euh, y a un os ?
The following strings are unacceptable:
"2,500.6" :-\\
"2500 3/5"
"2.5006x10e3"
Oui c'est bien ce que je pensais, pour arriver à ses fins dans un tel cas, on ne peut guere utiliser de formatter ou de convertisseurs, il faut modifier la string en elle meme en la scannant, je pense que la méthode "pourrie" que LeChatNoir s'est faites est très correcte... 8)
.
Quoi, les NSFormatter réservés pour les NSCells ?
Non, tu peux utiliser cette classe pour tout ce que tu veux dès l'instant où tu utilises correctement les méthodes de cette classe.
Ici, c'est finalement la meilleure solution (bien vu mpergand !).
Un formatter fait 2 choses :
- utilise une NSString pour créer un object conforme à ce que représente la chaà®ne.
- utilise un objet pour créer une NSString qui est la représentation visuelle du contenu de l'objet.
Ici, il faut utiliser la première méthode...
.
trop sympa de bosser pour nous, même le week end
On en apprend tout les jours ! :adios!: :rose!: