레일즈: 큰 숫자에 쉼표를 추가하는 레일즈 트릭이 있습니까?
레일즈가 쉼표가 들어간 숫자를 출력하게 하는 방법이 있습니까?
예를 들어 번호가 54000000.34이면 <%= 번호를 실행할 수 있습니다.함수 %," "54,000,000.34"가 출력됩니다.
감사합니다!
당신은 그 방법을 원합니다.예:
<%= number_with_delimiter(@number, :delimiter => ',') %>
또는 이 방법을 사용하여 숫자가 항상 소수점 이하 두 자리의 정밀도로 표시되도록 할 수 있습니다.
<%= number_with_precision(@number, :precision => 2, :delimiter => ',') %>
레일을 사용하지 않는 사용자:
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
레일이 있든 없든 직접적인 방법은 다음과 같습니다.
require 'active_support'
require 'active_support/core_ext/numeric/conversions'
123456.to_fs(:delimited) # => "123,456"
123456.789.to_fs(:delimited) # => "123,456.789"
자세한 옵션은 활성 지원 핵심 확장 - 숫자 - 서식을 참조하십시오.
예, 번호를 사용도우미. 찾으시는 메서드는 number_with_delimiter입니다.
number_with_delimiter(98765432.98, :delimiter => ",", :separator => ".")
# => 98,765,432.98
뷰 외부에 콤마를 추가하고 일부 모듈을 포함하지 않으려면 number_to_submited 메서드(기본 버전 > = 4.02)를 사용할 수 있습니다.예:
#inside anywhere
ActiveSupport::NumberHelper.number_to_delimited(1000000) # => "1,000,000"
만약 당신이 그것을 많이 하고 있지만 위에서 암시되지 않았기 때문에 참고로, 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 입니다.
Rails 6 애플리케이션을 작업할 때 이 문제가 있었습니다.
만약 그 번호가 품목의 가격에 대한 것이거나 통화와 관련이 있다면, 당신은 사용할 수 있습니다.number_to_currency 는 다음과 같습니다.
방법은 다음과 같습니다.
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
자세한 내용은 레일즈 설명서 number_to_currency에서 확인할 수 있습니다.
이상입니다.
이것이 도움이 되길 바랍니다.
새로운 구문
number_with_delimiter(@number, delimiter: ",")
만약 당신이 돈을 위해 딜리미터를 사용하고 싶다면, 당신은 할 수 있습니다.
number_to_currency(@number)
이것은 추가할 것입니다.$. 에약도. 만에약.money 은 할 수.
Money.new(@number,"USD").format
이것은 또한 넣을 것입니다.$.
Ruby guys의 경우:숫자 형식 지정(정수만 해당)은 수천 개의 각 그룹 사이에 쉼표 구분 기호를 사용합니다.
number = 12345678
numStr1 = number.to_s.reverse.scan(/.{1,3}/).join(',').reverse
puts numStr1 # => 12,345,678
numStr2 = number.to_s.gsub(/\B(?=(...)*\b)/, ',')
puts numStr2 # => 12,345,678
다음의 메서드를 사용할 수 있습니다.ActiveSupport
예:
ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})
도움말을 사용하지 않는 또 다른 솔루션: 소수점 두 자리로 형식을 지정한 다음 .을(를) ,
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개를 더 큰 숫자로 만드세요.
다음은 구분 기호와 정밀도(API ref) 모두에 대한 트릭입니다.
ActiveSupport::NumberHelper.number_to_rounded(1234.532, delimiter: ',', precision: 1)
에서만)number_to_rounded)
HTH
Ruby Polus: 함수를 만들어 쉼표를 큰 숫자 정수로 설정할 수 있습니다.
def number_with_comma(numStr)
return numStr.to_s.gsub(/\B(?=(...)*\b)/, ',')
end
a = number_with_comma 1234567
puts a => 1,234,567
x = 9876543
y = number_with_comma x
puts y => 9,876,543
Javascript 사람들을 위한.
function numberWithDelimiter(value) {
return (value+"").split("").reverse().join("").replace(/(\d{3})(?=\d)/g, '$1,').split("").reverse().join("")
}
:)
언급URL : https://stackoverflow.com/questions/1078347/rails-is-there-a-rails-trick-to-adding-commas-to-large-numbers
'programing' 카테고리의 다른 글
| VueJS 및 Axios: Axios 네트워크 요청을 중단할 때 구성 요소 로드 상태가 업데이트되지 않습니까? (0) | 2023.07.16 |
|---|---|
| MongoDB 로그 파일 증가 (0) | 2023.07.16 |
| Lucene을 구성합니다.SQL Server를 사용한 넷 (0) | 2023.07.16 |
| Oracle - 특정 ROW의 실제 크기를 얻으려면 어떻게 해야 합니까? (0) | 2023.07.16 |
| PL/Sql 프로시저 대 함수? (0) | 2023.07.16 |