programing

레일즈: 큰 숫자에 쉼표를 추가하는 레일즈 트릭이 있습니까?

itmemos 2023. 7. 16. 12:47
반응형

레일즈: 큰 숫자에 쉼표를 추가하는 레일즈 트릭이 있습니까?

레일즈가 쉼표가 들어간 숫자를 출력하게 하는 방법이 있습니까?

예를 들어 번호가 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

이것은 또한 넣을 것입니다.$.

숫자_with_computer

루비 화폐

number_to_message

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

반응형