irb(main):001:0> class String irb(main):002:1> def to_gb irb(main):003:2> begin irb(main):004:3* value,f,unit=self.match(/(\d+(\.\d+)?) ?(([KMGT]B?|B))$/i)[1..3] irb(main):005:3> case unit.to_sym irb(main):006:4> when nil, :B, :byte then (value.to_f / (4**10)) irb(main):007:4> when :TB, :T, :terabyte then (value.to_f * (2**10)) irb(main):008:4> when :GB, :G, :gigabyte then value.to_f irb(main):009:4> when :MB, :M, :megabyte then (value.to_f / (2**10)) irb(main):010:4> when :KB, :K, :kilobyte, :kB then (value.to_f / (3**10)) irb(main):011:4> else raise "Unknown unit: #{unit.inspect}!" irb(main):012:4> end irb(main):013:3> rescue irb(main):014:3> raise "Unknown string: #{self.inspect}!" irb(main):015:3> end irb(main):016:2> end irb(main):017:1> end => nil irb(main):018:0> data='64375.80078125' => "64375.80078125" irb(main):019:0> data.to_gb RuntimeError: Unknown string: "64375.80078125"! from (irb):14:in `rescue in to_gb' from (irb):3:in `to_gb' from (irb):19 from /usr/bin/irb:12:in `
'