2012-07-13 14 views

Respuesta

163

¿Qué tal esto?

"1,112".delete(',').to_i 
+0

Gracias por su respuesta. Es mucho mejor que el mío. De hecho, esperaba que hubiera una llamada en lugar de dos. como: "1,112" .to_money. Después de revisar las respuestas, es probable que no exista dicho método. De todos modos, ¡muchas gracias! – mCY

+0

@michealKohi me puede decir por qué eliminar() es mucho más rápido que hacer lo mismo en gsub que acepta expresiones regulares, siempre he pensado que la expresión regular es más rápida. He ejecutado Benchmark en ambos en su gran diferencia en el tiempo de ejecución. – Abhinay

+1

@Abhinay Con respecto a sus puntos de referencia: ¿tamaño de muestra? ¿Tamaño de cadena? –

4

Algunos más conveniente

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

se hace "1 200 200" trabajo adecuadamente aswell

+8

Aún mejor es ''1,1200.00'.gsub (/ [^ 0-9 \.] /,' '). To_f'. – Hauleth

+7

Espera, ¿por qué quieres convertir '" 1,1200.00 "' a '" 1120000 "'? ¿No solo quieres reemplazar el ',' (o, dependiendo de la configuración regional, el '.')? Además, esto no lo convierte en un entero o flotante, solo una cadena sin delimitadores. – brymck

+3

@Bryan: Para aventurar una suposición, es posible que desee hacer esto en una aplicación bancaria, al convertir una cantidad de moneda que el usuario ha ingresado, para tratar únicamente con enteros dentro de la aplicación: por ejemplo, convertir dólares y centavos en centavos. Este método evitará cualquier error de redondeo que pueda surgir inesperadamente al tratar con números de punto flotante. Cuando se debe mostrar al usuario una cantidad de moneda, el monto del centavo se puede convertir a dólares y centavos. (Aunque eso no es lo que preguntó el interrogador). –

1

que haría uso de String#tr:

"1,112".tr(',','').to_i # => 1112 
5

También es posible que desee hacer Asegúrese de que su código se localice correctamente o asegúrese de que los usuarios estén acostumbrados a la notación "internacional". Por ejemplo, "1,112" en realidad significa diferentes números en diferentes países. En Alemania significa el número un poco más de uno, en lugar de mil y algo.

El artículo correspondiente de Wikipedia está en http://en.wikipedia.org/wiki/Decimal_mark. Sin embargo, parece estar mal escrito en este momento. Por ejemplo, como chino, no estoy seguro de dónde viene esta descripción sobre el separador de miles en China.

1

El siguiente es otro método que funcionará, aunque como con algunos de los otros métodos eliminará los lugares decimales.

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

Si alguien está buscando a SUB a cabo más de una coma que soy un fan de:

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

dunno sobre el rendimiento, pero, es más flexible que un gsub, es decir:

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