Ruby on rails 转换&;将字符串存储到货币值中
我有一个字符串,我需要用RUBY和 验证它是否与预期的匹配Ruby on rails 转换&;将字符串存储到货币值中,ruby-on-rails,ruby,rubygems,Ruby On Rails,Ruby,Rubygems,我有一个字符串,我需要用RUBY和 验证它是否与预期的匹配 String = "$6,178.50 USD / 22,693.01 AED" 我想把它分成两个不同的变量,比如 usa_price = $6,178.50 aed_price = 22,693.01 预期的_输出=$6178.50*3.67=22693.01(应与AED中的值匹配) 我试着做gsub/扫描,现在我很困惑,最好的方法是什么 在Ruby中实现这一点 如果您确定第一个数字是美元,第二个数字是AED,并且订单不会改变,
String = "$6,178.50 USD / 22,693.01 AED"
我想把它分成两个不同的变量,比如
usa_price = $6,178.50
aed_price = 22,693.01
预期的_输出=$6178.50*3.67=22693.01
(应与AED中的值匹配)
我试着做gsub/扫描,现在我很困惑,最好的方法是什么
在Ruby中实现这一点 如果您确定第一个数字是美元,第二个数字是AED,并且订单不会改变,那么:
str = "$6,178.50 USD / 22,693.01 AED"
usa_price, aed_price = str.scan(/\d{1,2}?,?\d{1,3}\.\d{2}/)
#=> usa_price = 6,178.50, aed_price = 22,693.01
我会在
/
上拆分,然后使用gem解析出金额,如下所示:
require 'money'
amounts = "$6,178.50 USD / 22,693.01 AED".split("/")
amounts.map! { |amount| Money.parse(amount) }
然后,因为它们现在是Money
对象,所以您可以用它们来做金钱的事情:
>> amounts.first.format
=> "$6,178.50"
此解决方案是否适用于非千美元金额,即178.50美元?几十万美元的金额如何?或者几百万美元、几十亿美元、几万亿美元、万亿美元、万亿美元、五百万美元、六百万美元、七百万美元、八百万美元。。。基本上,这里列出的任何单元:我试图(可能过分)指出的一点是,用正则表达式解析货币金额是不好的,根本不应该尝试。另请参阅:我同意您的解决方案是最好的,但不同意不应该使用正则表达式来解析金钱。事实上,money gem使用正则表达式解析货币: