web-dev-qa-db-fra.com

Convertir une chaîne avec une virgule en entier

Existe-t-il une méthode intéressante pour convertir "1 112" en entier 1112, au lieu de 1?

J'en ai un, mais pas soigné:

"1,112".split(',').join.to_i #=> 1112
95
mCY

Que dis-tu de ça?

 "1,112".delete(',').to_i
173
Michael Kohl

Vous voudrez peut-être aussi vous assurer que votre code se localise correctement ou que les utilisateurs sont habitués à la notation "internationale". Par exemple, "1 112" signifie en réalité des nombres différents selon les pays. En Allemagne, le chiffre est un peu supérieur à un, au lieu de mille.

L'article correspondant de Wikipedia se trouve à http://en.wikipedia.org/wiki/Decimal_mark . Cela semble cependant être mal écrit. Par exemple, en tant que Chinois, je ne sais pas d'où vient cette description du séparateur de milliers en Chine.

5
Yì Yáng

Certains plus pratique

"1,1200.00".gsub(/[^0-9]/,'') 

"1 200 200" fonctionne correctement

4
Alexey Novikov

Ce qui suit est une autre méthode qui fonctionnera, bien que, comme certaines des autres méthodes, elle supprime les décimales.

a = 1,112
b = a.scan(/\d+/).join().to_i => 1112
2
Mahesh

Si quelqu'un cherche à remplacer plus d'une virgule, je suis fan de:

"1,200".chars.grep(/\d/).join.to_i

je ne sais pas à propos de la performance, mais il est plus flexible qu'un gsub, c'est-à-dire:

"1-200".chars.grep(/\d/).join.to_i
1
davidpm4

Je voudrais utiliser String#tr :

_"1,112".tr(',','').to_i # => 1112
_
1
Arup Rakshit