有办法让轨道打印出一个数字与逗号在它?

例如,如果我有一个数字540000000 .34,我可以运行<%= number。函数%>,输出“54,000,000.34”

谢谢!


当前回答

对于那些不使用rails处理小数的人来说,更好的方法是:

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

如果需要不同的分隔符,请更改正则表达式中的最后一个','。

额外的,这是正则表达式的工作方式:

gsub replaces everything that matches the regex with the second parameter passed to gsub. In this case that is \\1. \\1 becomes \1 when evaluated which matches the first capture group in the regex. In this regex that is (\d). (\d)(?=(\d\d\d)+) is matching a digit followed by 1 or more groups of 3 digits. The first set of parens is our \1 capture group, the second would be \2. If we were just to leave it at that we would get: 123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456 This is because 1234 matches, 2345 matches and 3456 matches so we put a comma after the 1, the 2, and the 3. By adding the (?!\d) we are matching anything that comes before that doesn't precede a digit so (\d)(?=(\d\d\d)+(?!\d)) means match a digit followed by 3 digits that is not followed by a digit. The reason why this works is that gsub will keep replacing things that match the string. If we were only going to replace the first match then for a number like 123456789 we would get 123456,789. Since 123456,789 still matches our regex we get 123,456,789.

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

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

其他回答

对于那些不使用rails处理小数的人来说,更好的方法是:

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

如果需要不同的分隔符,请更改正则表达式中的最后一个','。

额外的,这是正则表达式的工作方式:

gsub replaces everything that matches the regex with the second parameter passed to gsub. In this case that is \\1. \\1 becomes \1 when evaluated which matches the first capture group in the regex. In this regex that is (\d). (\d)(?=(\d\d\d)+) is matching a digit followed by 1 or more groups of 3 digits. The first set of parens is our \1 capture group, the second would be \2. If we were just to leave it at that we would get: 123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,456 This is because 1234 matches, 2345 matches and 3456 matches so we put a comma after the 1, the 2, and the 3. By adding the (?!\d) we are matching anything that comes before that doesn't precede a digit so (\d)(?=(\d\d\d)+(?!\d)) means match a digit followed by 3 digits that is not followed by a digit. The reason why this works is that gsub will keep replacing things that match the string. If we were only going to replace the first match then for a number like 123456789 we would get 123456,789. Since 123456,789 still matches our regex we get 123,456,789.

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

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

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

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

我在开发Rails 6应用程序时遇到了这个挑战。

如果数字是一个项目的价格或与货币有关,那么你可以使用number_to_currency ActionView Helper

以下是如何做到这一点:

number_to_currency("123456789")                      # => $123456789
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(1234567890.50, unit: '₦', delimiter: ',', precision: 0)    # => ₦1,234,567,890
number_to_currency(1234567890.50, unit: "R$", separator: ",", delimiter: "")  # => R$1234567890,50

您可以在Rails文档:number_to_currency中了解更多有关它的信息

这是所有。

我希望这对你们有帮助

您需要使用number_with_delimiter方法。例如:

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

或者,你也可以使用number_with_precision方法来确保数字总是以小数点后两位的精度显示:

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

对于javascript的人

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

:)