javascript 文件大小函数故障,字节在 1000 到 1024 之间

Posted

技术标签:

【中文标题】javascript 文件大小函数故障,字节在 1000 到 1024 之间【英文标题】:javascript filesize function glitch with bytes between 1000 and 1024 【发布时间】:2017-11-15 09:57:08 【问题描述】:

所以我创建了这个函数,它将字节数调整为正确的二进制单位。我遇到的问题是,只要文件介于 1000 和 1024 字节之间,它就会显示为:1.02e+3 KB。我是做错了什么还是我忘了捕获所有异常?感谢您的帮助。

var ce_sizeSuffixes = [" B", " KB", " MB", " GB", " TB"];

function grid_filesizeCellClientTemplate(bytes) 
    if (!bytes)
        return "";

    var e = Math.floor(Math.log(bytes) / Math.log(1024));
    var size = (bytes / Math.pow(1024, Math.floor(e)));
    var unit = ce_sizeSuffixes[e];
    //bug with a size >= 1000 and < 1024
    return '<span title="' + bytes + ' bytes">' + (e === 0 ? size : size.toPrecision(3)) + unit + '</span>';

解决方案:

var ce_sizeSuffixes = [" B", " KB", " MB", " GB", " TB"];
function grid_filesizeCellClientTemplate(bytes) 
if (!bytes)
    return "";

var e = Math.floor(Math.log(bytes) / Math.log(1024));
var size = (bytes / Math.round(size * 1000) / 1000));
var unit = ce_sizeSuffixes[e];
//bug with a size >= 1000 and < 1024
return '<span title="' + bytes + ' bytes">' + (e === 0 ? size : size.toPrecision(3)) + unit + '</span>';

【问题讨论】:

我无法复制您的问题。你在哪里运行这个? 同上,我认为你应该使用 1000 而不是 1024。阅读这个...en.wikipedia.org/wiki/Binary_prefix 这就是toPrecision 所做的...... 【参考方案1】:

toPrecision 输出格式化为给定有效位数的数字。 1010,或10001024 之间的任何数字在你的情况下,有4 个有效数字,但你告诉代码给出3。因此,1.01e+3

如果您想将数字四舍五入到小数点后 3 位,请考虑使用Math.round(size*1000)/1000

【讨论】:

您是否能够复制“错误”?如果有,怎么做? @evolutionxbox 打开浏览器控制台,输入1010..toPrecision(3),获取"1.01e+3" @NiettheDarkAbsol 所以你的意思是我的返回语句应该是这样的: return '' + (e === 0 ? size : Math.round (大小*1000)/1000) + 单位 + '';因为这对我没有任何改变 您可以更简洁地将其合并到您的 var size = ... 代码中,但这绝对可以。 @NiettheDarkAbsol 谢谢! (贝当克特!)

以上是关于javascript 文件大小函数故障,字节在 1000 到 1024 之间的主要内容,如果未能解决你的问题,请参考以下文章

C 语言文件操作 ( 使用 fseek 函数生成指定大小文件 | 偏移量 文件字节数 - 1 )

用javascript格式化(人性化)文件字节大小表示

为啥将调用函数提前 1 个字节会导致它发生故障?修改啥来解决?

使用 JavaScript 数学将字节转换为千兆字节

在PHP中,通过filesize函数可以取得文件的大小,文件大小是以字节数表示的。如果要转换文件大小的单位,可以自己定义函数来实现。

如何通过javascript读取swf的大小