如何将数字1000格式化为"1 000"

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
Run Code Online (Sandbox Code Playgroud)

  • 只需用空格('\&,`和`\&`)替换&符号就可以了. (5认同)
  • 这是一个处理负数的修改:`n.to_s.reverse.gsub(/...(?!-)(?=.)/,',&,').reverse`.例如:" - 174",而不是" - ,174". (4认同)
  • 这将添加逗号,而不是空格顺便说一句 (2认同)

ste*_*lag 21

Activesupport使用此正则表达式(并且没有反向反向).

10000000.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1 ") #=> "10 000 000"
Run Code Online (Sandbox Code Playgroud)


Jef*_*ein 9

如果你正在处理整数,这是另一种相当干净和直接的方法:

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"
Run Code Online (Sandbox Code Playgroud)

适用于整数.当然,这个特定的例子将用逗号分隔数字,但是切换到空格或任何其他分隔符就像替换join方法中的参数一样简单.

  • @Matrix这可能就是为什么这是对这个问题的最高回复:)我只是在解决这个问题.我喜欢Ruby,因为总有一百种不同的做法! (2认同)

saw*_*awa 8

正式文件提出了三种不同的方法:

1)使用lookbehind和lookahead(需要oniguruma)

12500.to_s.gsub(/(?<=\d)(?=(?:\d{3})+\z)/, ' ')
# => "12 500"
Run Code Online (Sandbox Code Playgroud)

2)仅使用前瞻.与steenslag的答案完全相同.

3)既不使用前瞻也不使用外观

s = 12500.to_s
nil while s.sub!(/(.*\d)(\d{3})/, '\1 \2')
s # => "12 500"
Run Code Online (Sandbox Code Playgroud)


nil*_*lid 5

很简单的:

number_with_delimiter(12500, delimiter: " ")

参见:http : //apidock.com/rails/ActionView/Helpers/NumberHelper/number_with_delimiter

  • 这不适用于 ruby​​,这只是 rails 方法 (3认同)