[ruby-on-rails] 많은 수의 쉼표를 추가하는 데 유용한 방법이 있습니까?

레일에 쉼표가있는 숫자를 인쇄하는 방법이 있습니까?

예를 들어, 숫자가 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 => ',') %>


답변

레일을 사용하지 않는 사람 :

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


답변

Rails의 유무에 관계없이 이를 수행하는 직접적인 방법은 다음 같습니다.

require 'active_support/core_ext/numeric/conversions'

12345.to_s(:delimited)      # => "12,345"
12345.6789.to_s(:delimited) # => "12,345.6789"

자세한 옵션은 활성 지원 코어 확장-숫자 형식을 참조하십시오 .


답변

예, 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('.')

다른 구분 기호를 원하면 정규식에서 마지막 ‘,’을 변경하십시오.

보너스로 다음과 같이 정규 표현식이 작동합니다.

  • gsub는 정규 표현식과 일치하는 모든 것을 gsub에 전달 된 두 번째 매개 변수로 바꿉니다. 이 경우에는입니다 \\1. \\1하게 \1정규식의 첫 번째 캡처 그룹과 일치하는 평가 때. 이 정규식에서 (\d).
  • (\d)(?=(\d\d\d)+)숫자 다음에 하나 이상의 3 자리 그룹을 찾습니다. 첫 번째 세트는 우리의 \1캡처 그룹이고, 두 번째는입니다 \2. 우리가 그것을 그대로두면 우리는 얻을 것입니다 :
    123456.gsub!(/(\d)(?=(\d\d\d)+)/, "\\1,") #=> 1,2,3,4561234 개의 일치, 2345 개의 일치 및 3456 개의 일치 때문에 1, 2 및 3 뒤에 쉼표를 넣습니다.
  • (?! \ d)를 추가하면 앞에 오는 숫자 (\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