我想取一个数字并将其格式化为价格(作为字符串)。例如,我想拍摄250000并显示250,000美元。如何使用正则表达式完成此操作?
答案 0 :(得分:5)
要添加逗号,您可以试试这样的内容:
/(\d)(?=(?:\d{3})+$)/
然后将所有匹配项替换为\1,
。
因此:
"12345512312".gsub(/(\d)(?=(?:\d{3})+$)/,'\1,') => "12,345,512,312"
这将匹配任意数字,后跟任意数量的3位数组。
例如以上示例中的第一个2
后面跟着3个组:345
,512
和312
。第一个5
后跟两个群组:512
和312
等。
不确定您是否能够在同一个正则表达式中添加$
。
答案 1 :(得分:2)
试试这个(免责声明 - 不是正则表达式):
def prettify(n)
int, dec = n.to_s.split('.')
int = int.reverse.scan(/.{1,3}/).join(',').reverse
[int, dec].reject(&:empty?).join('.')
end
虽然可能是这种东西的宝石
答案 2 :(得分:2)
与正则表达式匹配,这对#@来说很痛苦!在这种情况下,因为正则表达式引擎从字符串的开头开始匹配,而不是结束(从字符串末尾开始并向后查找3位数字模式)。我建议做这样的事情:
format_int = ->(s) do
str = s.reverse.scan(/\d{1,3}/).join(',').reverse
"$#{str}"
end
format_int['2500600'] => "$2,500,600"
...使用Kernel#sprintf
(这可能有点棘手)或者,如您所愿:
我错了,可以使用正则表达式here和here来实现。
答案 3 :(得分:0)
您应该使用number_to_currency helper
number_to_currency(1234567890.50) # => $1,234,567,890.50
number_to_currency(1234567890.506) # => $1,234,567,890.51
number_to_currency(1234567890.506, precision: 3) # => $1,234,567,890.506
number_to_currency(1234567890.506, locale: :fr) # => 1 234 567 890,51 €
number_to_currency("123a456") # => $123a456
number_to_currency("123a456", raise: true) # => InvalidNumberError
number_to_currency(-1234567890.50, negative_format: "(%u%n)")
# => ($1,234,567,890.50)
number_to_currency(1234567890.50, unit: "£", separator: ",", delimiter: "")
# => £1234567890,50
number_to_currency(1234567890.50, unit: "£", separator: ",", delimiter: "", format: "%n %u")
# => 1234567890,50 £
了解更多信息,请查看http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html