有大量的数字加逗号的铁轨技巧吗?

有没有办法让钢轨用逗号打印出来呢?

例如,如果我有一个数字54000000.34,我可以运行<%= number.function%>,这将打印出“54,000,000.34”

谢谢!

你想要number_with_delimiter方法。 例如:

 <%= number_with_delimiter(@number, :delimiter => ',') %> 

或者,您可以使用number_with_precision方法确保数字始终以精确度的两位小数位显示:

 <%= number_with_precision(@number, :precision => 2, :delimiter => ',') %> 

对于任何不使用rails的人:

 number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse 

是的,使用NumberHelper 。 你正在寻找的方法是number_with_delimiter 。

  number_with_delimiter(98765432.98, :delimiter => ",", :separator => ".") # => 98,765,432.98 

如果你做了很多,但也是FYI,因为它不是由上面的暗示,Rails有number_with_delimiter方法明智的默认值。

 #inside controller or view number_with_delimiter(2444323.4) #=> 2,444,323.30 #inside console helper.number_with_delimiter(233423) #=> 233,423 

没有必要提供分隔符值,如果你是最典型的方式。

如果你想在视图之外添加逗号,并且你不想包含一些模块,你可以使用number_to_delimited方法(rails version> = 4.02)。 例如:

 #inside anywhere ActiveSupport::NumberHelper.number_to_delimited(1000000) # => "1,000,000" 

对于那些不使用处理小数的rails的更好的方法:

 parts = number.to_s.split('.') parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,") parts.join('.') 

如果你想要一个不同的分隔符,改变正则expression式中的最后一个','。

对于奖金,这是如何正则expression式工作:

  • gsub用传递给gsub的第二个参数replace与正则expression式匹配的所有东西。 在这种情况下是\\1\\1在正则expression式中与第一个捕获组匹配的时候变成\1 。 在这个正则expression式是(\d)
  • (\d)(?=(\d\d\d)+)匹配一个数字后跟一个或多个3位数字组。 第一组人员是我们的\1 ,第二人是\2 。 如果我们只是把它留在那,我们将得到: 123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456这是因为1234场比赛,2345场比赛和3456场比赛,所以我们在1,2和3之后加逗号。
  • 通过添加(?!\ d),我们匹配之前没有数字的任何东西,所以(\d)(?=(\d\d\d)+(?!\d))意味着匹配数字后面跟着3个数字,后面跟着一个数字。 这个工程的原因是gsub会不断的replace与string匹配的东西。 如果我们只是要取代第一场比赛,那么像123456789这样的数字,我们会得到123456789。 由于123456789仍然匹配我们的正则expression式,我们得到了123456789。

这里是我得到的代码: https : //github.com/rails/rails/blob/master/activesupport/lib/active_support/number_helper.rb#L298-L300

这里是我了解正则expression式中发生了什么: http : //www.tutorialspoint.com/ruby/ruby_regular_expressions.htm

使用或不使用Rails的直接方式是:

 require 'active_support/core_ext/numeric/conversions' 12345.to_s(:delimited) # => "12,345" 12345.6789.to_s(:delimited) # => "12,345.6789" 

有关更多选项,请参阅主动支持核心扩展 – 数字 – 格式化 。

另一个不使用Helpers的解决scheme:格式为2位小数,然后replace。 由,

 puts(("%.2f" % 2.5666).gsub('.',',')) >> 2,57 

为JavaScript的人

 function numberWithDelimiter(value) { return (value+"").split("").reverse().join("").replace(/(\d{3})(?=\d)/g, '$1,').split("").reverse().join("") } 

🙂

您可以使用ActiveSupport方法

例如:

ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})