跳至内容 跳至搜索
方法
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"
# File activesupport/lib/active_support/number_helper.rb, line 139
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"
# File activesupport/lib/active_support/number_helper.rb, line 242
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 代表量词(例如,“千”)。默认值为 "%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

在 I18n 本地化中,Hash 也可以定义为一个作用域。例如

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 453
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。

# File activesupport/lib/active_support/number_helper.rb, line 351
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  %"
# File activesupport/lib/active_support/number_helper.rb, line 201
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"
# File activesupport/lib/active_support/number_helper.rb, line 66
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"
# File activesupport/lib/active_support/number_helper.rb, line 298
def number_to_rounded(number, options = {})
  NumberToRoundedConverter.convert(number, options)
end