用伪代码来表示的话大致如下:
suffixes = [ "EB", "PB", "TB", "GB", "MB", "kB", "B" ]
magnitudes = [ 1018, 1015, 1012...然后我就想到,kB、MB、GB……等后缀只不过是1000的幂(或者在IEC标准下是1024的幂),也就是说不需要使用循环,完全可以使用对数来计算正确的后缀。...然后对s向下取整(强制转换为int),这样对于大于1MB但不足1GB的都可以用MB来表示。
此时如果s=1,尺度就是kB,如果s=2,尺度就是MB,以此类推。...是不是一些奇怪的舍入问题?对了……
许多9
这段代码在1MB之前都非常正确。但当输入为999,999时,它(在SI模式下)会给出“1000.0 kB”。...负输入
尽管还不清楚什么情况下会用到负的字节数,但由于Java并没有无符号的long,所以最好处理复数。现在,-10,000会产生-10000 B。