type rails money data ruby-on-rails ruby currency

ruby-on-rails - rails money data type



Cadena de rubí con USD "dinero" convertido a número (5)

¿Existe actualmente una gema que sea capaz de tomar cadenas, todas en USD para este propósito, y convertirlas en un número? Algunos ejemplos serían:

  • "$ 7,600" se convertiría en 7600
  • "5500" se convertiría en 5500

Sé que en el ejemplo "5500" puedo hacer "5500" .to_i, pero las hojas de cálculo que se importan no son coherentes y algunas incluyen comas y signos de dólar, mientras que otras no. ¿Hay una manera decente de manejar esto en general en Ruby?

He intentado algo como money_string.scan(//d/).join que parece estar bien, solo me preocupa que me encuentre con casos de borde que aún no he encontrado, como los decimales.


¿Por qué no eliminar todos los caracteres que no sean dígitos antes de llamar a .to_i

Ejemplo:

"$7,600".gsub(//D/,'''').to_i

Y para un número de punto flotante:

"$7,600.90".gsub(/[^/d/.]/, '''').to_f


Debería poder recortar cualquier carácter no numérico con un objeto Ruby RegEx . Desinfecte sus entradas para eliminar cualquier cosa que no sea números a la izquierda de un punto decimal, y luego analice la cadena de solo números como un número.

(Y tenga en cuenta que, si obtiene hojas de cálculo reales en lugar de una bunk CSV, es probable que haya una propiedad de value que pueda leer que ignore el texto que se muestra en la pantalla).


Podrías usar la gema del Money

Money.parse("$100") == Money.new(10000, "USD")


Tu puedes hacer:

"$100.00".scan(/[.0-9]/).join().to_f

o to_i si solo son dólares


def dollar_to_number(dollarPrice) if dollarPrice dollarPrice[1, dollarPrice.length].to_i end end