레일에 쉼표가있는 숫자를 인쇄하는 방법이 있습니까?
예를 들어, 숫자가 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,456
1234 개의 일치, 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