我想取一个数字并将其格式化为价格(作为字符串)。例如,我想取 250000 并显示 $250,000。如何使用正则表达式完成此操作?
问问题
173 次
4 回答
5
要添加逗号,您可以尝试以下操作:
/(\d)(?=(?:\d{3})+$)/
然后将每个匹配替换为\1,
.
像这样:
"12345512312".gsub(/(\d)(?=(?:\d{3})+$)/,'\1,') => "12,345,512,312"
这将匹配任意数字后跟任意数量的 3 位组。
例如,上例中的第一个2
后面跟着 3 个组345
:512
和312
。第一个5
后面是 2 组:512
and312
等。
不确定您是否可以$
在同一个正则表达式中添加。
于 2013-03-11T15:28:52.520 回答
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所示。
于 2013-03-11T15:31:04.420 回答
2
试试这个(免责声明 - 不是正则表达式):
def prettify(n)
int, dec = n.to_s.split('.')
int = int.reverse.scan(/.{1,3}/).join(',').reverse
[int, dec].reject(&:empty?).join('.')
end
可能是这种东西的宝石
于 2013-03-11T15:29:30.143 回答
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
于 2013-12-20T20:49:30.723 回答