Pretty file size in Ruby?

后端 未结 7 1878
半阙折子戏
半阙折子戏 2020-12-13 20:06

I\'m trying to make a method that converts an integer that represents bytes to a string with a \'prettied up\' format.

Here\'s my half-working attempt:



        
7条回答
  •  半阙折子戏
    2020-12-13 20:25

    @Darshan Computing's solution is only partial here. Since the hash keys are not guaranteed to be ordered this approach will not work reliably. You could fix this by doing something like this inside the to_filesize method,

     conv={
          1024=>'B',
          1024*1024=>'KB',
          ...
     }
     conv.keys.sort.each { |s|
         next if self >= s
         e=conv[s]
         return "#{(self.to_f / (s / 1024)).round(2)}#{e}" if self < s }
     }
    

    This is what I ended up doing for a similar method inside Float,

     class Float
       def to_human
         conv={
           1024=>'B',
           1024*1024=>'KB',
           1024*1024*1024=>'MB',
           1024*1024*1024*1024=>'GB',
           1024*1024*1024*1024*1024=>'TB',
           1024*1024*1024*1024*1024*1024=>'PB',
           1024*1024*1024*1024*1024*1024*1024=>'EB'
         }
         conv.keys.sort.each { |mult|
            next if self >= mult
            suffix=conv[mult]
            return "%.2f %s" % [ self / (mult / 1024), suffix ]
         }
       end
     end
    

提交回复
热议问题