Spec-Zone.ru › Ruby on Rails 8.1

module ActiveSupport::NumberHelper

Вспомогательные методы для чисел

Предоставляет методы для форматирования чисел в виде денежных сумм, процентов, телефонных номеров и т. д.

Пример использования в классе:

class Topic
  include ActiveSupport::NumberHelper

  def price
    number_to_currency(@price)
  end
end

Пример использования в модуле:

require "active_support/number_helper"

module NumberFormatting
  def format_price(price)
    ActiveSupport::NumberHelper.number_to_currency(price)
  end
end

Открытые методы экземпляра

number_to_currency (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 161
def number_to_currency(number, options = {})
  NumberToCurrencyConverter.convert(number, options)
end

Форматирует number в виде денежной суммы.

number_to_currency(1234567890.50)  # => "$1,234,567,890.50"
number_to_currency(1234567890.506) # => "$1,234,567,890.51"
number_to_currency("12x34")        # => "$12x34"

number_to_currency(1234567890.50, unit: "£", separator: ",", delimiter: "")
# => "£1234567890,50"

Если не указано иное в параметрах, используются денежная единица и формат числа для текущей локали. Конвертация валюты не выполняется. Если пользователь может изменять свою локаль, он также сможет изменять относительное значение валюты, отображаемой этим вспомогательным методом. Если ваше приложение будет поддерживать несколько локалей, вы можете указать постоянный параметр :locale или рассмотреть возможность использования библиотеки, поддерживающей конвертацию валют.

Параметры

:locale

Локаль, используемая для форматирования. По умолчанию используется текущая локаль.

number_to_currency(1234567890.506, locale: :fr)
# => "1 234 567 890,51 €"
:precision

Точность. По умолчанию — 2.

number_to_currency(1234567890.123, precision: 3) # => "$1,234,567,890.123"
number_to_currency(0.456789, precision: 0)       # => "$0"
:round_mode

Задает способ округления. См. BigDecimal.mode. По умолчанию — :default.

number_to_currency(1234567890.01, precision: 0, round_mode: :up)
# => "$1,234,567,891"
:unit

Обозначение валюты. По умолчанию — "$".

:separator

Десятичный разделитель. По умолчанию — ".".

:delimiter

Разделитель тысяч. По умолчанию — ",".

:format

Формат для неотрицательных чисел. %u обозначает валюту, а %n — число. По умолчанию — "%u%n".

number_to_currency(1234567890.50, format: "%n %u")
# => "1,234,567,890.50 $"
:negative_format

Формат для отрицательных чисел. %u и %n работают так же, как в :format, но %n обозначает абсолютное значение числа. По умолчанию используется значение :format с добавленным в начало -.

number_to_currency(-1234567890.50, negative_format: "(%u%n)")
# => "($1,234,567,890.50)"
:strip_insignificant_zeros

Удалять ли незначащие нули после десятичного разделителя. По умолчанию — false.

number_to_currency(1234567890.50, strip_insignificant_zeros: true)
# => "$1,234,567,890.5"
number_to_delimited (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 264
def number_to_delimited(number, options = {})
  NumberToDelimitedConverter.convert(number, options)
end

Форматирует number, группируя разряды тысяч с помощью разделителя.

number_to_delimited(12345678)      # => "12,345,678"
number_to_delimited("123456")      # => "123,456"
number_to_delimited(12345678.9876) # => "12,345,678.9876"
number_to_delimited("12x34")       # => "12x34"

number_to_delimited(12345678.9876, delimiter: ".", separator: ",")
# => "12.345.678,9876"

Параметры

:locale

Локаль, используемая для форматирования. По умолчанию используется текущая локаль.

number_to_delimited(12345678.05, locale: :fr)
# => "12 345 678,05"
:delimiter

Разделитель тысяч. По умолчанию — ",".

number_to_delimited(12345678, delimiter: ".")
# => "12.345.678"
:separator

Десятичный разделитель. По умолчанию — ".".

number_to_delimited(12345678.05, separator: " ")
# => "12,345,678 05"
:delimiter_pattern

Регулярное выражение, определяющее расположение разделителей. Полезно при использовании денежных форматов, например INR.

number_to_delimited("123456.78", delimiter_pattern: /(\d+?)(?=(\d\d)+(\d)(?!\d))/)
# => "1,23,456.78"
number_to_human (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 475
def number_to_human(number, options = {})
  NumberToHumanConverter.convert(number, options)
end

Форматирует number в более удобном для восприятия виде. Полезно для чисел, которые могут быть очень большими и трудными для чтения.

number_to_human(123)                 # => "123"
number_to_human(1234)                # => "1.23 Thousand"
number_to_human(12345)               # => "12.3 Thousand"
number_to_human(1234567)             # => "1.23 Million"
number_to_human(1234567890)          # => "1.23 Billion"
number_to_human(1234567890123)       # => "1.23 Trillion"
number_to_human(1234567890123456)    # => "1.23 Quadrillion"
number_to_human(1234567890123456789) # => "1230 Quadrillion"

См. number_to_human_size, если нужно красиво отобразить размер файла.

Параметры

:locale

Локаль, используемая для форматирования. По умолчанию используется текущая локаль.

:precision

Точность. По умолчанию — 3.

number_to_human(123456, precision: 2) # => "120 Thousand"
number_to_human(123456, precision: 4) # => "123.5 Thousand"
:round_mode

Задает способ округления. См. BigDecimal.mode. По умолчанию — :default.

number_to_human(123456, precision: 2, round_mode: :up)
# => "130 Thousand"
:significant

Применять ли :precision к значащим цифрам, а не к дробной части. По умолчанию — true.

:separator

Десятичный разделитель. По умолчанию — ".".

number_to_human(123456, precision: 4, separator: ",")
# => "123,5 Thousand"
:delimiter

Разделитель тысяч. По умолчанию — ",".

:strip_insignificant_zeros

Удалять ли незначащие нули после десятичного разделителя. По умолчанию — true.

number_to_human(1000000)                                   # => "1 Million"
number_to_human(1000000, strip_insignificant_zeros: false) # => "1.00 Million"
number_to_human(10.01)                                     # => "10"
number_to_human(10.01, strip_insignificant_zeros: false)   # => "10.0"
:format

Формат вывода. %n обозначает число, а %u — порядковое наименование (например, «тысяча»). По умолчанию — "%n %u".

:units

Hash собственных наименований единиц.

number_to_human(1, units: { unit: "m", thousand: "km" })        # => "1 m"
number_to_human(100, units: { unit: "m", thousand: "km" })      # => "100 m"
number_to_human(1000, units: { unit: "m", thousand: "km" })     # => "1 km"
number_to_human(100000, units: { unit: "m", thousand: "km" })   # => "100 km"
number_to_human(10000000, units: { unit: "m", thousand: "km" }) # => "10000 km"

Для целых единиц поддерживаются следующие ключи: :unit, :ten, :hundred, :thousand, :million, :billion, :trillion, :quadrillion. Кроме того, для дробных единиц поддерживаются следующие ключи: :deci, :centi, :mili, :micro, :nano, :pico, :femto.

Hash также можно определить как область в локали I18n. Например:

en:
  distance:
    centi:
      one: "centimeter"
      other: "centimeters"
    unit:
      one: "meter"
      other: "meters"
    thousand:
      one: "kilometer"
      other: "kilometers"

Затем ее можно указать по имени:

number_to_human(1, units: :distance)        # => "1 meter"
number_to_human(100, units: :distance)      # => "100 meters"
number_to_human(1000, units: :distance)     # => "1 kilometer"
number_to_human(100000, units: :distance)   # => "100 kilometers"
number_to_human(10000000, units: :distance) # => "10000 kilometers"
number_to_human(0.1, units: :distance)      # => "10 centimeters"
number_to_human(0.01, units: :distance)     # => "1 centimeter"
number_to_human_size (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 373
def number_to_human_size(number, options = {})
  NumberToHumanSizeConverter.convert(number, options)
end

Форматирует number в байтах в более удобном для восприятия виде. Полезно для отображения пользователям размеров файлов.

number_to_human_size(123)                 # => "123 Bytes"
number_to_human_size(1234)                # => "1.21 KB"
number_to_human_size(12345)               # => "12.1 KB"
number_to_human_size(1234567)             # => "1.18 MB"
number_to_human_size(1234567890)          # => "1.15 GB"
number_to_human_size(1234567890123)       # => "1.12 TB"
number_to_human_size(1234567890123456)    # => "1.1 PB"
number_to_human_size(1234567890123456789) # => "1.07 EB"

См. number_to_human, если нужно красиво отобразить обычное число.

Параметры

:locale

Локаль, используемая для форматирования. По умолчанию используется текущая локаль.

:precision

Точность. По умолчанию — 3.

number_to_human_size(123456, precision: 2)  # => "120 KB"
number_to_human_size(1234567, precision: 2) # => "1.2 MB"
:round_mode

Задает способ округления. См. BigDecimal.mode. По умолчанию — :default.

number_to_human_size(123456, precision: 2, round_mode: :up)
# => "130 KB"
:significant

Применять ли :precision к значащим цифрам, а не к дробной части. По умолчанию — true.

:separator

Десятичный разделитель. По умолчанию — ".".

number_to_human_size(1234567, separator: ",")
# => "1,18 MB"
:delimiter

Разделитель тысяч. По умолчанию — ",".

:strip_insignificant_zeros

Удалять ли незначащие нули после десятичного разделителя. По умолчанию — true.

number_to_percentage (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 223
def number_to_percentage(number, options = {})
  NumberToPercentageConverter.convert(number, options)
end

Форматирует number в виде строки с процентным значением.

number_to_percentage(100)   # => "100.000%"
number_to_percentage("99")  # => "99.000%"
number_to_percentage("99x") # => "99x%"

number_to_percentage(12345.6789, delimiter: ".", separator: ",", precision: 2)
# => "12.345,68%"

Параметры

:locale

Локаль, используемая для форматирования. По умолчанию используется текущая локаль.

number_to_percentage(1000, locale: :fr)
# => "1000,000%"
:precision

Точность или nil для сохранения точности number. По умолчанию — 2.

number_to_percentage(12.3456789, precision: 4) # => "12.3457%"
number_to_percentage(99.999, precision: 0)     # => "100%"
number_to_percentage(99.999, precision: nil)   # => "99.999%"
:round_mode

Задает способ округления. См. BigDecimal.mode. По умолчанию — :default.

number_to_percentage(12.3456789, precision: 4, round_mode: :down)
# => "12.3456%"
:significant

Применять ли :precision к значащим цифрам, а не к дробной части. По умолчанию — false.

number_to_percentage(12345.6789)                                  # => "12345.679%"
number_to_percentage(12345.6789, significant: true)               # => "12300%"
number_to_percentage(12345.6789, precision: 2)                    # => "12345.68%"
number_to_percentage(12345.6789, precision: 2, significant: true) # => "12000%"
:separator

Десятичный разделитель. По умолчанию — ".".

:delimiter

Разделитель тысяч. По умолчанию — ",".

:strip_insignificant_zeros

Удалять ли незначащие нули после десятичного разделителя. По умолчанию — false.

:format

Формат вывода. %n обозначает число. По умолчанию — "%n%".

number_to_percentage(100, format: "%n  %")
# => "100.000  %"
number_to_phone (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 88
def number_to_phone(number, options = {})
  NumberToPhoneConverter.convert(number, options)
end

Форматирует number в виде телефонного номера.

number_to_phone(5551234)    # => "555-1234"
number_to_phone("5551234")  # => "555-1234"
number_to_phone(1235551234) # => "123-555-1234"
number_to_phone("12x34")    # => "12x34"

number_to_phone(1235551234, delimiter: ".", country_code: 1, extension: 1343)
# => "+1.123.555.1234 x 1343"

Параметры

:area_code

Использовать ли скобки для кода города. По умолчанию — false.

number_to_phone(1235551234, area_code: true)
# => "(123) 555-1234"
:delimiter

Разделитель групп цифр. По умолчанию — "-".

number_to_phone(1235551234, delimiter: " ")
# => "123 555 1234"
:country_code

Код страны, добавляемый в начало.

number_to_phone(1235551234, country_code: 1)
# => "+1-123-555-1234"
:extension

Добавляемый в конец добавочный номер.

number_to_phone(1235551234, extension: 555)
# => "123-555-1234 x 555"
:pattern

Регулярное выражение, задающее группировку цифр. Первые три захваченные группы выражения рассматриваются как группы цифр.

number_to_phone(13312345678, pattern: /(\d{3})(\d{4})(\d{4})$/)
# => "133-1234-5678"
number_to_phone(75561234567, pattern: /(\d{1,4})(\d{4})(\d{4})$/, area_code: true)
# => "(755) 6123-4567"
number_to_rounded (number, options = {}) Показать исходный код
# File activesupport/lib/active_support/number_helper.rb, line 320
def number_to_rounded(number, options = {})
  NumberToRoundedConverter.convert(number, options)
end

Форматирует number с заданной точностью.

number_to_rounded(12345.6789)                # => "12345.679"
number_to_rounded(12345.6789, precision: 2)  # => "12345.68"
number_to_rounded(12345.6789, precision: 0)  # => "12345"
number_to_rounded(12345, precision: 5)       # => "12345.00000"

Параметры

:locale

Локаль, используемая для форматирования. По умолчанию используется текущая локаль.

number_to_rounded(111.234, locale: :fr)
# => "111,234"
:precision

Точность или nil для сохранения точности number. По умолчанию — 3.

number_to_rounded(12345.6789, precision: nil)
# => "12345.6789"
:round_mode

Задает способ округления. См. BigDecimal.mode. По умолчанию — :default.

number_to_rounded(12.34, precision: 0, round_mode: :up)
# => "13"
:significant

Применять ли :precision к значащим цифрам, а не к дробной части. По умолчанию — false.

number_to_rounded(12345.6789)                                  # => "12345.679"
number_to_rounded(12345.6789, significant: true)               # => "12300"
number_to_rounded(12345.6789, precision: 2)                    # => "12345.68"
number_to_rounded(12345.6789, precision: 2, significant: true) # => "12000"
:separator

Десятичный разделитель. По умолчанию — ".".

:delimiter

Разделитель тысяч. По умолчанию — ",".

:strip_insignificant_zeros

Удалять ли незначащие нули после десятичного разделителя. По умолчанию — false.

number_to_rounded(12.34, strip_insignificant_zeros: false)  # => "12.340"
number_to_rounded(12.34, strip_insignificant_zeros: true)   # => "12.34"
number_to_rounded(12.3456, strip_insignificant_zeros: true) # => "12.346"

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API