Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 转换&;将字符串存储到货币值中_Ruby On Rails_Ruby_Rubygems - Fatal编程技术网

Ruby on rails 转换&;将字符串存储到货币值中

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,并且订单不会改变,

我有一个字符串,我需要用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,并且订单不会改变,那么:

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使用正则表达式解析货币: