2008-12-08 8 views
14

Ich muss eine Integer-Darstellung von Bytes in etwas freundlicher formatieren, und ich hoffe, dass es eine Dienstprogrammfunktion in Ruby oder in Rails, die diese Formatierung für mich tun (um meine Faulheit zu verewigen, von Kurs)Friendly Byte Formatierung in Rails

ich bin auf der Suche nach etwas, das aussehen würde.

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

Sieht aus wie es in Active einige Sachen ist es anders herum zu tun, aber ich habe nicht einen Weg gefunden zu tun es in dieser Richtung.

Wenn es keinen existiert, hat jemand eine besonders elegante Lösung?

Antwort

37

Number to human size ist was du suchst.

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

Danke! Ich habe nach dieser genauen Lösung gesucht. – CalebHC

+0

Der maximale Wert ist number_to_human_size (999999999999999) # => "909 TB" – adcosta

1

Akzeptierte Antwort funktioniert immer noch, erfordert aber actionpack anstelle von actionview in neueren Schienen.

1

Akzeptierte Antwort, es ist perfekt, aber ich brauchte nicht die ersten beiden Zeilen. ich nur sagen:

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 

und wirkt wie ein Zauber.