Convertir cadena con coma a entero


95

¿Existe algún método sencillo para convertir "1112" en un número entero 1112, en lugar de 1?

Tengo uno, pero no ordenado:

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

Respuestas:


175

¿Qué tal esto?

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

Gracias por tu 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 tal método. De todos modos, ¡muchas gracias!
mCY

@michealKohi, ¿puedes decirme por qué delete () es mucho más rápido que hacer lo mismo en gsub que acepta expresiones regulares? Siempre he pensado que la forma de expresiones regulares es más rápida. He ejecutado Benchmark en ambos por su gran diferencia en el tiempo de ejecución.
Abhinay

1
@Abhinay Con respecto a sus puntos de referencia: ¿tamaño de la muestra? ¿Tamaño de cadena?
Michael Kohl

5

También puede asegurarse de que su código se localice correctamente o asegurarse de que los usuarios estén acostumbrados a la notación "internacional". Por ejemplo, "1112" en realidad significa números diferentes 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 de Wikipedia correspondiente se encuentra 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.


4

Algunos mas convenientes

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

hace que "1200200" funcione correctamente también


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

7
Espera, ¿por qué quiere convertir "1,1200.00"a "1120000"? ¿No solo desea reemplazar el ,(o, según la configuración regional, el .)? Además, esto no lo convierte en un número entero o flotante, solo una cadena sin delimitadores.
brymck

3
@Bryan: para aventurar una conjetura, es posible que desee hacer esto en una aplicación bancaria, al convertir una cantidad de moneda que el usuario ha ingresado, para tratar solo con números enteros dentro de la aplicación: por ejemplo, convertir dólares y centavos a centavos . Este método evitará cualquier error de redondeo que pueda surgir inesperadamente al tratar con números de punto flotante. Cuando es necesario mostrar una cantidad de moneda al usuario, la cantidad de centavos se puede convertir a dólares y centavos. (Aunque eso no es sobre lo que preguntó el interlocutor.)
Teemu Leisti

2
Esta respuesta ni siquiera aborda la solicitud del autor de la pregunta de convertir la cadena en un número entero o flotante.
LS

2

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

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


1

Si alguien busca sustituir más que una coma, soy fan de:

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

No sé sobre el rendimiento, pero es más flexible que a gsub, es decir:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.