답변:
number_with_delimiter
방법 이 필요합니다 . 예를 들면 다음과 같습니다.
<%= number_with_delimiter(@number, :delimiter => ',') %>
또는이 number_with_precision
방법을 사용하여 숫자가 항상 소수점 이하 두 자리로 표시되도록 할 수 있습니다 .
<%= number_with_precision(@number, :precision => 2, :delimiter => ',') %>
number_with_delimiter
엄청나게 복잡한 호출 스택으로 인해 지나치게 복잡하고 속도가 느립니다. 그것은 사용 i18n
인류와 외계 문명 (또는 어쩌면 그냥 중 하나를 선택할로 알려진 수치를 포맷 할 수 ,
또는 .
당신이 인수로 지정하는 경우에도, 진수 용). 수천 개의 개체를 할당하므로 성능 패턴이 복잡하고 프로파일 링하기가 어렵습니다. 로케일에 따라 숫자를 형식화하는 다른 방법을 지원할 필요가없는 경우 정규 표현식 사용을 고려하십시오.
레일을 사용하지 않는 사람 :
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
\1
충분 하지 않습니까? 감사.
Rails의 유무에 관계없이 이를 수행하는 직접적인 방법은 다음 과 같습니다.
require 'active_support/core_ext/numeric/conversions'
12345.to_s(:delimited) # => "12,345"
12345.6789.to_s(:delimited) # => "12,345.6789"
자세한 옵션은 활성 지원 코어 확장-숫자 형식을 참조하십시오 .
ActiveSupport::NumberHelper.number_to_delimited
으로도 사용할 수 있습니다 . 이 답변은 더 많은지지를 받아야합니다.
예, NumberHelper를 사용하십시오 . 찾고있는 방법은 number_with_delimiter 입니다.
number_with_delimiter(98765432.98, :delimiter => ",", :separator => ".")
# => 98,765,432.98
뷰 외부에 쉼표를 추가하고 일부 모듈을 포함하지 않으려면 number_to_delimited 메소드를 사용하십시오 (레일 버전> 4.02). 예를 들면 다음과 같습니다.
#inside anywhere
ActiveSupport::NumberHelper.number_to_delimited(1000000) # => "1,000,000"
위의 내용에 암시되지 않았기 때문에 많은 일을하지만 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
가장 일반적인 방법으로 구분 기호 값을 제공 할 필요가 없습니다.
소수를 처리하는 레일을 사용하지 않는 사람들에게 더 좋은 방법은 다음과 같습니다.
parts = number.to_s.split('.')
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
parts.join('.')
다른 구분 기호를 원하면 정규식에서 마지막 ','을 변경하십시오.
보너스로 다음과 같이 정규 표현식이 작동합니다.
\\1
. \\1
하게 \1
정규식의 첫 번째 캡처 그룹과 일치하는 평가 때. 이 정규식에서 (\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))
와 일치 하지 않습니다. 따라서 숫자 다음에 3 자리 숫자 다음에 숫자가 나오지 않습니다. 이것이 작동하는 이유는 gsub가 문자열과 일치하는 것을 계속 대체하기 때문입니다. 첫 번째 일치 만 바꾸려면 123456789와 같은 숫자로 123456,789를 얻습니다. 123456,789는 여전히 정규 표현식과 일치하므로 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
{{ value | round | replace: "(\d)(?=(\d\d\d)+(?!\d))", "$1," | prepend: "$" }}
도우미를 사용하지 않는 또 다른 솔루션 : 소수점 이하 두 자리로 형식을 지정한 다음을 바꿉니다. 으로
puts(("%.2f" % 2.5666).gsub('.',','))
>> 2,57
def add_commas(numstring)
correct_idxs = (1..100).to_a.select{|n| n % 6 == 0}.map{|n| n - 1}
numstring.reverse.chars.join(",").chars.select.with_index{|x, i| i.even? || correct_idxs.include?(i)}.join.reverse
end
이것은 루비에 내 길이었다
추가 편집 : 기본적으로 숫자 사이에 모든 쉼표를 추가하고 색인 + 1 % 6 인 쉼표 만 선택합니다
쉼표를 100까지 올릴 수 있다고 생각했지만 슈퍼 긴 숫자를 원하면 100을 더 높은 숫자로 만드십시오.
새로운 구문
number_with_delimeter(@number, delimeter: ",")
당신은 돈을 위해 delimeter를 사용하려는 경우 할 수 있습니다
number_to_currency(@number)
이것도 추가 $
됩니다. money
보석을 사용 한다면 할 수 있습니다
Money.new(@number,"USD").format
이것도 넣을 것 $
입니다.
ActionView::Helpers::NumberHelper
내에 포함시켜 모듈에서 사용할 수 있어야합니다 .