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