如何将数字 1000 格式化为“1 000”
我需要一种格式化数字的方法。我在数据库表中存储了一些数字,例如 12500
,并希望以 12 500
格式打印它们(因此每 3 位数字有一个空格)。有没有一种优雅的方法来做到这一点?
I need a way to format numbers. I stored some numbers in my DB table, e.g. 12500
, and would like to print them in this format 12 500
(so there is a space every 3 digits). Is there an elegant way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
没有内置的方法(除非您使用 Rails,ActiveSupport 确实有方法来做到这一点),但您可以使用正则表达式,例如
There is no built in way to it ( unless you using Rails, ActiveSupport Does have methods to do this) but you can use a Regex like
Activesupport 使用此正则表达式(并且没有反向反向)。
Activesupport uses this regexp (and no reverse reverse).
如果您处理整数,这是另一种相当简洁明了的方法:
对于整数非常有效。当然,这个特定示例将用逗号分隔数字,但切换到空格或任何其他分隔符就像替换
join
方法中的参数一样简单。Here's another method that is fairly clean and straightforward if you are dealing with integers:
Works great for integers. Of course, this particular example will separate the number by commas, but switching to spaces or any other separator is as simple as replacing the parameter in the
join
method.官方文档提出了三种不同的方式:
1)使用lookbehind和lookahead(需要oniguruma)
2) 仅使用前瞻。与 steenslag 的答案相同。
3)既不使用lookahead也不使用lookbehind
The official document suggests three different ways:
1) Using lookbehind and lookahead (Requires oniguruma)
2) Using only lookahead. Identical to steenslag's answer.
3) Using neither lookahead nor lookbehind
非常简单:
number_with_delimiter(12500, delimiter: " ")
请参阅: http://apidock.com/rails/ActionView/Helpers/NumberHelper/number_with_delimiter
very simple:
number_with_delimiter(12500, delimiter: " ")
see: http://apidock.com/rails/ActionView/Helpers/NumberHelper/number_with_delimiter
另一种方法:
您可以随时打开 Fixnum 类并添加以下内容以方便使用:
Another way:
You can always Open the Fixnum class and add this for convenience:
所以,这非常疯狂和黑客,但它完成了工作......
So, this is pretty crazy and hackish, but it gets the job done...
除一个答案外,所有答案均使用
n.to_s
。 @MrMorphe 没有,但他创建了一个要join
的数组。这是一种既不使用 Fixnum#to_s 也不是 Array#join。嗯。右侧的那个柱子是倾斜的吗?
另一种使用
to_s
但不使用join
的方法:All but one of the answers use
n.to_s
. @MrMorphe's does not, but he creates an array to bejoin
ed. Here's a way that uses neither Fixnum#to_s nor Array#join.Hmmm. Is that column on the right tipping?
Another way that uses
to_s
but notjoin
:这是旧的,但我能找到的最快、最优雅的方法是:
我将尝试在某个时候添加基准。
This is old but the fastest and most elegant way I could find to do this is:
I'll try and add benchmarks at some point.
另一种方式:
这里“分隔符是
' '
(空格),可以指定','
进行货币换算。”Another way:
Here "delimiter is
' '
(space), you can specify','
for money conversion."我只是在寻找一种将值格式化为美国货币的方法时偶然发现了这个线程。我对所提出的正则表达式解决方案采取了略有不同的方法:
这可以参数化以格式化其他货币。
I just stumbled on this thread while looking for a way to format a value as US currency. I took a slightly different approach to the regex solutions proposed:
This could be parameterized for formatting other currencies.
我知道这是一个老问题但是。
为什么不直接使用子字符串替换。
用伪代码......
我知道它不是用任何特定的语言,但希望你能明白。
大卫
I'm aware this is an old question but.
why not just use a substring substitution.
in pseudo code....
I know it isn't in any particular languange, but hopefully you get the idea.
David