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
,或1000
和1024
之间的任何数字在你的情况下,有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 )
为啥将调用函数提前 1 个字节会导致它发生故障?修改啥来解决?
在PHP中,通过filesize函数可以取得文件的大小,文件大小是以字节数表示的。如果要转换文件大小的单位,可以自己定义函数来实现。