Дружественное форматирование байтов в Rails - PullRequest
14 голосов
/ 08 декабря 2008

Мне нужно отформатировать целочисленное представление байтов в нечто дружественное, и я надеюсь, что в Ruby или Rails есть служебная функция, которая сделает это форматирование для меня (чтобы увековечить мою лень, конечно.) *

Я ищу что-то похожее на:

format_bytes(1024)     -> "1 KB"
format_bytes(1048576)  -> "1 MB"

Похоже, в ActiveSupport есть кое-что, чтобы сделать это наоборот, но я не нашел способа сделать это в этом направлении.

Если его нет, есть ли у кого-нибудь особенно элегантное решение?

Ответы [ 3 ]

38 голосов
/ 08 декабря 2008

Число от человеческого размера - это то, что вы ищете.

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
1 голос
/ 13 февраля 2015

Принято, ответ отлично, но мне не нужны были первые две строки. Я только положил:

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

и работает как шарм.

1 голос
/ 30 июня 2010

Принятый ответ все еще работает, но требует actionpack вместо actionview в новых рельсах.

require 'actionpack'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...