use*_*705 30 ruby formatting numbers function
我需要一种格式化数字的方法.我在我的数据库表中存储了一些数字,例如12500,并希望以这种格式打印它们12 500(因此每3位数就有一个空格).有一种优雅的方式来做到这一点?
loo*_*non 37
请参阅:http://www.justskins.com/forums/format-number-with-comma-37369.html
没有内置的方法(除非你使用Rails,ActiveSupport有方法可以做到这一点)但你可以使用像这样的正则表达式
formatted_n = n.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse
ste*_*lag 21
Activesupport使用此正则表达式(并且没有反向反向).
10000000.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1 ") #=> "10 000 000"
如果你正在处理整数,这是另一种相当干净和直接的方法:
number.to_s.reverse.scan(/\d{1,3}/).join(",").reverse
number            #=> 12345678
.to_s             #=> "12345678"
.reverse          #=> "87654321"
.scan(/\d{1,3}/)  #=> ["876","543","21"]
.join(",")        #=> "876,543,21"
.reverse          #=> "12,345,678"
适用于整数.当然,这个特定的例子将用逗号分隔数字,但是切换到空格或任何其他分隔符就像替换join方法中的参数一样简单.
在正式文件提出了三种不同的方法:
1)使用lookbehind和lookahead(需要oniguruma)
12500.to_s.gsub(/(?<=\d)(?=(?:\d{3})+\z)/, ' ')
# => "12 500"
2)仅使用前瞻.与steenslag的答案完全相同.
3)既不使用前瞻也不使用外观
s = 12500.to_s
nil while s.sub!(/(.*\d)(\d{3})/, '\1 \2')
s # => "12 500"
很简单的:
number_with_delimiter(12500, delimiter: " ")
参见:http : //apidock.com/rails/ActionView/Helpers/NumberHelper/number_with_delimiter