2008-12-08 19 views
14

Necesito formatear una representación entera de bytes en algo amigable, y espero que haya una función de utilidad en Ruby o en Rails que me haga ese formato (para perpetuar mi pereza, de por supuesto)Formateo de bytes amigables en Rails

Busco algo que se vería así:.

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

Parece que hay algunas cosas en ActiveSupport de hacerlo al revés, pero no he encontrado una manera de hacer en esta dirección.

Si no hay ninguno, ¿alguien tiene una solución particularmente elegante?

Respuesta

37

Number to human size es lo que estás buscando.

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

Gracias! Estaba buscando esta solución exacta. – CalebHC

+0

valor máximo es number_to_human_size (999999999999999) # => "909 TB" – adcosta

1

respuesta aceptada todavía funciona, pero requiere actionpack en lugar de ActionView en los nuevos carriles.

require 'actionpack' 
1

aceptado contestar es perfecto, pero que no necesitaba las dos primeras líneas. Yo sólo puse:

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 

y funciona como un encanto.