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
Открытые методы экземпляра
# 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"
# 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"
# 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"
# 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.
# 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 %"
# 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"
# 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.