Xử lý format number trong rails

Cung cấp các method để chuyển đổi từ số thành các chuổi định dạng, ví dụ như số điện thoại, tiền tệ, tỷ lệ phần trăm, kích thước file... Hầu hết các phương thức yêu cầu một đối số, và sẽ trả lại không thay đổi nếu không thể chuyển đổi thành một số hợp lệ.

number_to_currency(number, options = {})

Định dạng một số thành một chuổi tiền tệ (e.g., $13.65). Bạn có thể tủy chỉnh định dạng trong hash options .

Options:

  • :locale - Thiết lập theo khu vực sử dụng (mặc định là khu vực hiện tại).
  • :precision - Thiết lập mức độ chính xác (mặc định là 2).
  • :unit - Thiết lập đơn vị của đồng tiền (mặc định là “$”).
  • :separator - Thiết lập phân cách giữa các đơn vị (mặc định là “.”).
  • :delimiter - Thiết lập dấu phân cách hàng ngàn (mặc định là “,”).
  • :format - Thiết lập định dạng cho số dương (mặc định là “%u%n”).%u là cho đơn vị tiền tệ, và %n là cho số lượng.
  • :raise - Nếu là true, raises InvalidNumberError khi đối số không hợp lệ.

Ví dụ:

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("123a456")                        # => $123a456
number_to_currency("123a456", raise: true)           # => InvalidNumberError
number_to_currency(-1234567890.50, negative_format: "(%u%n)")
# => ($1,234,567,890.50)
number_to_currency(1234567890.50, unit: "R$", separator: ",", delimiter: "")
# => R$1234567890,50
number_to_currency(1234567890.50, unit: "R$", separator: ",", delimiter: "", format: "%n %u")
# => 1234567890,50 R$

number_to_human_size(number, options = {})

Định dạng một số thành kích thước file (e.g., 1.5 KB). Phương pháp này rất hữu ích cho việc báo cáo kích thước tập tin cho người sử dụng. Bạn có thể tủy chỉnh định dạng trong hash options .

Options:

  • :locale - Thiết lập theo khu vực sử dụng (mặc định là khu vực hiện tại).
  • :precision - Thiết lập mức độ chính xác (mặc định là 3).
  • :significant - If true, precision will be the number of significant_digits. If false, the number of fractional digits (defaults to false).
  • :separator - Thiết lập phân cách giữa các chữ số phân số và số nguyên (mặc định là “.”).
  • :delimiter - Thiết lập dấu phân cách hàng ngàn (mặc định là “”).
  • :strip_insignificant_zeros - Nếu là true, loại bỏ số không đáng kể sau các phân số thập phân (mặc định là true)
  • :prefix -Nếu là :si định dạng số bằng cách sử dụng tiền tố SI (mặc định là :binary)
  • :raise - Nếu là true, raises InvalidNumberError khi đối số không hợp lệ.

Ví dụ:

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_size(1234567, precision: 2)                        # => 1.2 MB
number_to_human_size(483989, precision: 2)                         # => 470 KB
number_to_human_size(1234567, precision: 2, separator: ',')        # => 1,2 MB
number_to_human_size(1234567890123, precision: 5)                  # => "1.1228 TB"
number_to_human_size(524288000, precision: 5)                      # => "500 MB"

number_to_phone(number, options = {})

Định dạng một số thành một số điện thoại (US by default e.g., (555) 123-9876). Bạn có thể tủy chỉnh định dạng trong hash options .

Options:

  • :area_code - Thêm dấu ngoặc xung quanh mã vùng.
  • :delimiter - Xác định dấu phân cách để sử dụng (mặc định là "-").
  • :extension - Chỉ định một phần mở rộng để thêm vào cuối của số tạo ra.
  • :country_code - Thiết lập mã quốc gia của số điện thoại.
  • :pattern - Chỉ định cách mà số được chia thành ba nhóm với regexp tùy chỉnh để ghi đè lên các định dạng mặc định.
  • :raise - Nếu là true, raises InvalidNumberError khi đối số không hợp lệ.

Ví dụ:

number_to_phone(5551234)                                           # => 555-1234
number_to_phone("5551234")                                         # => 555-1234
number_to_phone(1235551234)                                        # => 123-555-1234
number_to_phone(1235551234, area_code: true)                       # => (123) 555-1234
number_to_phone(1235551234, delimiter: " ")                        # => 123 555 1234
number_to_phone(1235551234, area_code: true, extension: 555)       # => (123) 555-1234 x 555
number_to_phone(1235551234, country_code: 1)                       # => +1-123-555-1234
number_to_phone("123a456")                                         # => 123a456
number_to_phone("1234a567", raise: true)                           # => InvalidNumberError
number_to_phone(1235551234, country_code: 1, extension: 1343, delimiter: ".")
# => +1.123.555.1234 x 1343
number_to_phone(75561234567, pattern: /(\d{1,4})(\d{4})(\d{4})$/, area_code: true)
# => "(755) 6123-4567"
number_to_phone(13312345678, pattern: /(\d{3})(\d{4})(\d{4})$/))
# => "133-1234-5678"

number_to_percentage(number, options = {})

Định dạng số là một chuỗi tỷ lệ phần trăm (e.g., 65%). Bạn có thể tủy chỉnh định dạng trong hash options .

Options:

  • :locale - * :locale - Thiết lập theo khu vực sử dụng (mặc định là khu vực hiện tại).
  • :precision -Thiết lập độ chính xác của các số (mặc định là 3).
  • :significant - If true, precision will be the number of significant_digits. If false, the number of fractional digits (defaults to false).
  • :separator - Thiết lập phân cách giữa các chữ số phân số và số nguyên (mặc định là “.”).
  • :delimiter - Thiết lập dấu phân cách hàng ngàn (mặc định là “”).
  • :strip_insignificant_zeros - Nếu là true, loại bỏ số không đáng kể sau các số thập phân (mặc định là false).
  • :format - Chỉ định định dạng của chuỗi tỷ lệ phần trăm. (mặc định là “%n%”).
  • :raise - Nếu là true, raises InvalidNumberError khi đối số không hợp lệ.

Ví dụ:

number_to_percentage(100)                                        # => 100.000%
number_to_percentage("98")                                       # => 98.000%
number_to_percentage(100, precision: 0)                          # => 100%
number_to_percentage(1000, delimiter: '.', separator: ',')       # => 1.000,000%
number_to_percentage(302.24398923423, precision: 5)              # => 302.24399%
number_to_percentage(1000, locale: :fr)                          # => 1 000,000%
number_to_percentage("98a")                                      # => 98a%
number_to_percentage(100, format: "%n  %")                       # => 100.000  %
number_to_percentage("98a", raise: true)                         # => InvalidNumberError

Một số method khác

Ngoài ra còn một số method như number_to_human, number_with_delimiter, number_with_precision. Các bạn có thể tham khảo thêm ở đây http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html