数字助手¶ ↑
提供将数字格式化为货币、百分比、电话号码等的方法。
类中的示例用法
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
- N
实例公共方法
number_to_currency(number, options = {}) 链接
将 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"
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 161 def number_to_currency(number, options = {}) NumberToCurrencyConverter.convert(number, options) end
number_to_delimited(number, options = {}) 链接
通过使用分隔符对千位进行分组来格式化 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"
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 264 def number_to_delimited(number, options = {}) NumberToDelimitedConverter.convert(number, options) end
number_to_human(number, options = {}) 链接
将 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代表量词(例如,“Thousand”)。默认为"%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"
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 475 def number_to_human(number, options = {}) NumberToHumanConverter.convert(number, options) end
number_to_human_size(number, options = {}) 链接
将 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。
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 373 def number_to_human_size(number, options = {}) NumberToHumanSizeConverter.convert(number, options) end
number_to_percentage(number, options = {}) 链接
将 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 %"
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 223 def number_to_percentage(number, options = {}) NumberToPercentageConverter.convert(number, options) end
number_to_phone(number, options = {}) 链接
将 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"
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 88 def number_to_phone(number, options = {}) NumberToPhoneConverter.convert(number, options) end
number_to_rounded(number, options = {}) 链接
将 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"
来源: 显示 | 在 GitHub 上
# File activesupport/lib/active_support/number_helper.rb, line 320 def number_to_rounded(number, options = {}) NumberToRoundedConverter.convert(number, options) end