我在导入过程中获得以下货币:
$22.21
($55.95)
我可以Money.parse('$22.21')
解析成RubyMoney个对象。
但是,如何将($55.95)
解析为否定的RubyMoney对象?我是否需要先将其解析为负数然后再解析为RubyMoney对象?这似乎是一个常见的请求,但我找不到任何东西,通过搜索一些奇怪的原因。
如果我获得-$55.95
,我就可以在其上运行Money.parse('-$55.95')
。如果该方法可以处理正负货币,则可以获得奖励。
答案 0 :(得分:2)
来自@swapnilabnave linked to:
的网页 :negative_format
- 设置负数的格式(默认为将连字符添加到格式化的数字,格式为:format)。接受与以下相同的字段:格式,除了%n在这里是数字的绝对值。
因此,您可以使用(%u%n)
获得所需的效果。
答案 1 :(得分:0)
您可以使用正则表达式查看字符串是否包含括号。如果是,请删除它们,并在前面添加一个负号:
str.include?(")") ? str.gsub(/\(|\)/, "").insert(0, "-") : str
示例:
2.0.0p247 :013 > str = "($55.95)"
=> "($55.95)"
2.0.0p247 :014 > str.include?(")") ? str.gsub(/\(|\)/, "").insert(0, "-") : str
=> "-$55.95"
这也适用于正值:
2.0.0p247 :016 > str = "$55.95"
=> "$55.95"
2.0.0p247 :017 > str.include?(")") ? str.gsub(/\(|\)/, "").insert(0, "-") : str
=> "$55.95"
答案 2 :(得分:0)
首先,您可以delete括号,然后解析
money = "($55.95)"
money = money.delete!('()') and "-#{money}" or money
Money.parse(money)
这是RubyMoney的自述文件 sign_before_symbol
为什么不使用number_to_currency?