4

我在 stackoverflow 上找到了一个非常优雅的 Java 的“人性化”转换器,它没有使用任何循环。

是否可以用 javascript 做同样的事情?(例如 1024 字节 => 1 kb)?

听起来很简单,我已经做了很多搜索

如果您想知道:Java 版本

4

2 回答 2

5
function byteCount (bytes, unit) {
  if (bytes < (unit = unit || 1000)) 
    return bytes + " B";
  var exp = Math.floor (Math.log (bytes) / Math.log (unit));
  var pre = ' ' +(unit === 1000 ? "kMGTPE" : "KMGTPE").charAt (exp - 1) + (unit === 1000 ? "" : "i") + 'B';
    return (bytes / Math.pow (unit, exp)).toFixed (1) + pre;
}

[ 0, 27, 999, 1000, 1023, 1024, 1728, 110592, 7077888, 
  452984832, 28991029248, 1855425871872, 9223372036854775807].forEach (
    function (v) { console.log (v, byteCount (v), byteCount (v, 1024)); });

/* Displays :    
0 "0 B" "0 B"
27 "27 B" "27 B"
999 "999 B" "999 B"
1000 "1.0 kB" "1000 B"
1023 "1.0 kB" "1023 B"
1024 "1.0 kB" "1.0 KiB"
1728 "1.7 kB" "1.7 KiB"
110592 "110.6 kB" "108.0 KiB"
7077888 "7.1 MB" "6.8 MiB"
452984832 "453.0 MB" "432.0 MiB"
28991029248 "29.0 GB" "27.0 GiB"
1855425871872 "1.9 TB" "1.7 TiB"
9223372036854776000 "9.2 EB" "8.0 EiB" */

请注意,Java 版本结果表显示 7.1 KB 而不是 7.1 MB 时出现错误

于 2012-05-17T18:41:53.650 回答
0

现在有几个非常不错的用于 JS 的 Humanize 库,我建议你看看:

HubSpot/人性化加

如果你想看看,还有https://github.com/taijinlee/humanize 。

于 2014-01-24T02:08:12.963 回答