首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取以兆字节为单位的准确文件大小?

获取以兆字节为单位的准确文件大小?
EN

Stack Overflow用户
提问于 2011-06-02 22:27:47
回答 3查看 34K关注 0票数 21

如何才能得到准确的文件大小( MB )?我试过这个:

compressed_file_size = File.size("Compressed/#{project}.tar.bz2") / 1024000

puts "file size is #{compressed_file_size} MB"

但它砍掉了0.9,显示了2MB而不是2.9MB

EN

回答 3

Stack Overflow用户

发布于 2011-06-02 22:29:54

你正在做整数除法(去掉小数部分)。试着除以1024000.0,这样ruby就知道你想做浮点运算了。

票数 9
EN

Stack Overflow用户

发布于 2011-06-02 22:31:46

尝试:

compressed_file_size = File.size("Compressed/#{project}.tar.bz2").to_f / 1024000
票数 3
EN

Stack Overflow用户

发布于 2014-05-23 04:47:21

您可能会发现格式化函数很有用(pretty print file size),下面是我的示例,

def format_mb(size)
  conv = [ 'b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb' ];
  scale = 1024;

  ndx=1
  if( size < 2*(scale**ndx)  ) then
    return "#{(size)} #{conv[ndx-1]}"
  end
  size=size.to_f
  [2,3,4,5,6,7].each do |ndx|
    if( size < 2*(scale**ndx)  ) then
      return "#{'%.3f' % (size/(scale**(ndx-1)))} #{conv[ndx-1]}"
    end
  end
  ndx=7
  return "#{'%.3f' % (size/(scale**(ndx-1)))} #{conv[ndx-1]}"
end

测试一下,

tries = [ 1,2,3,500,1000,1024,3000,99999,999999,999999999,9999999999,999999999999,99999999999999,3333333333333333,555555555555555555555]

tries.each { |x|
  print "size #{x} -> #{format_mb(x)}\n"
}

它产生了,

size 1 -> 1 b
size 2 -> 2 b
size 3 -> 3 b
size 500 -> 500 b
size 1000 -> 1000 b
size 1024 -> 1024 b
size 3000 -> 2.930 kb
size 99999 -> 97.655 kb
size 999999 -> 976.562 kb
size 999999999 -> 953.674 mb
size 9999999999 -> 9.313 gb
size 999999999999 -> 931.323 gb
size 99999999999999 -> 90.949 tb
size 3333333333333333 -> 2.961 pb
size 555555555555555555555 -> 481.868 eb
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6215889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档