Ruby字符串与美元“钱”转换为数字

时间:2013-12-10 01:04:04

标签: ruby-on-rails ruby currency

目前是否有能够接受字符串的宝石,为此目的全部以美元为单位,并将它们转换为数字?一些例子是:

  • “$ 7,600”将变成7600
  • “5500”会变成5500

我知道在“5500”示例中我可以做“5500”.to_i,但导入的电子表格不一致,有些包括逗号和美元符号,而有些则没有。在Ruby中有一个很好的处理方式吗?

我尝试过类似money_string.scan(/\d/).join的内容似乎很好,只是担心我会遇到我尚未找到的边缘情况,例如小数位。

6 个答案:

答案 0 :(得分:39)

为什么不在调用.to_i

之前删除所有非数字字符

示例:

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

对于浮点数:

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

答案 1 :(得分:9)

你可以这样做:

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

或to_i如果他们只是美元

答案 2 :(得分:7)

您可以使用Money gem

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

答案 3 :(得分:0)

您应该能够使用Ruby RegEx对象修剪任何非数字字符。清理输入以删除小数点左侧除数字之外的任何内容,然后将仅数字字符串解析为数字。

(请注意,如果您获得实际的电子表格而不是CSV上下铺,则可能会显示value属性,忽略屏幕上显示的文字。)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您可以使用Monetize宝石:

pry(main)> Monetize.parse("$7,600").to_i
=> 7600

https://github.com/RubyMoney/monetize

pry(main)> Monetize.parse("$7,600").class
=> Money