Форматирование дружественного байта в Rails
Мне нужно отформатировать целочисленное представление байтов во что-то дружелюбное, и я надеюсь, что там будет функция утилиты в Ruby или Rails, которая сделает это форматирование для меня (чтобы увековечить мою лень, конечно.)
Я ищу что-то, что будет выглядеть:
format_bytes(1024) -> "1 KB"
format_bytes(1048576) -> "1 MB"
Похоже, что в ActiveSupport есть кое-что, чтобы сделать это наоборот, но я не нашел способ сделать это в этом направлении.
Если нет такого, что существует, есть ли у кого-то особенно элегантное решение?
Ответы
Ответ 1
Число для человеческого размера - это то, что вы ищете.
require 'action_view'
include ActionView::Helpers::NumberHelper
number_to_human_size(123) # => 123 Bytes
number_to_human_size(1234) # => 1.2 KB
number_to_human_size(12345) # => 12.1 KB
number_to_human_size(1234567) # => 1.2 MB
number_to_human_size(1234567890) # => 1.1 GB
number_to_human_size(1234567890123) # => 1.1 TB
number_to_human_size(1234567, :precision => 2) # => 1.18 MB
number_to_human_size(483989, :precision => 0) # => 473 KB
number_to_human_size(1234567, :precision => 2, :separator => ',') # => 1,18 MB
Ответ 2
Принятый ответ все еще работает, но требует actionpack вместо actionview в новых рельсах.
require 'actionpack'
Ответ 3
Принятый ответ - идеальный, но мне не нужны первые две строки.
Я только положил:
number_to_human_size(123) # => 123 Bytes
number_to_human_size(1234) # => 1.2 KB
number_to_human_size(12345) # => 12.1 KB
number_to_human_size(1234567) # => 1.2 MB
number_to_human_size(1234567890) # => 1.1 GB
number_to_human_size(1234567890123) # => 1.1 TB
number_to_human_size(1234567, :precision => 2) # => 1.18 MB
number_to_human_size(483989, :precision => 0) # => 473 KB
number_to_human_size(1234567, :precision => 2, :separator => ',') # => 1,18 MB
и работает как шарм.