有办法让轨道打印出一个数字与逗号在它?
例如,如果我有一个数字540000000 .34,我可以运行<%= number。函数%>,输出“54,000,000.34”
谢谢!
有办法让轨道打印出一个数字与逗号在它?
例如,如果我有一个数字540000000 .34,我可以运行<%= number。函数%>,输出“54,000,000.34”
谢谢!
当前回答
对于javascript的人
function numberWithDelimiter(value) {
return (value+"").split("").reverse().join("").replace(/(\d{3})(?=\d)/g, '$1,').split("").reverse().join("")
}
:)
其他回答
对于不使用rails的人:
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
另一种不使用helper的解决方案:格式化2位小数,然后替换。由,
puts(("%.2f" % 2.5666).gsub('.',','))
>> 2,57
下面的代码可以同时用于分隔符和精度(API ref)。
ActiveSupport::NumberHelper.number_to_rounded(1234.532, delimiter: ',', precision: 1)
(或者从视图中只使用number_to_rount_round,不需要前缀)
HTH
您需要使用number_with_delimiter方法。例如:
<%= number_with_delimiter(@number, :delimiter => ',') %>
或者,你也可以使用number_with_precision方法来确保数字总是以小数点后两位的精度显示:
<%= number_with_precision(@number, :precision => 2, :delimiter => ',') %>
对于那些不使用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