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

ran*_*its 22 ruby currency ruby-on-rails

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

  • "7,600美元"将变成7600
  • "5500"将变成5500

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

我已经尝试了类似的东西money_string.scan(/\d/).join似乎很好,只是担心我会遇到我还没有找到的边缘情况,比如小数位.

nai*_*ipl 41

为什么不在调用之前删除所有非数字字符 .to_i

例:

"$7,600".gsub(/\D/,'').to_i
Run Code Online (Sandbox Code Playgroud)

对于浮点数:

"$7,600.90".gsub(/[^\d\.]/, '').to_f
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要考虑底片,那么只需在上面浮点示例中的正则表达式中添加" - "即可.`" - $ 7,600.90".gsub(/ [^\d\.-] /,'').to_f`或`" - $ 7,600.90".gsub(/ [^\d\.-] /,'').to_i ` (3认同)

Len*_*nny 9

你可以做:

"$100.00".scan(/[.0-9]/).join().to_f
Run Code Online (Sandbox Code Playgroud)

如果他们只是美元,或者to_i


Jos*_*phL 7

你可以使用Money gem

Money.parse("$100") == Money.new(10000, "USD")
Run Code Online (Sandbox Code Playgroud)

  • 从版本6.0.0开始,`parse`已从Money中弃用,现在已成为Monetize的一部分https://github.com/RubyMoney/monetize (7认同)

Dou*_*ugM 0

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

(请注意,如果您获取的是实际的电子表格而不是 CSV 数据,value您可能会读取一个忽略屏幕上显示的文本的属性。)