Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.2k views
in Technique[技术] by (71.8m points)

js计算磁盘已用空间和剩余空间出现误差问题

image.png
如图
直接计算已用空间、剩余空间可能出现图片中的数据总和不匹配的问题,考虑了以下方案,感觉还是有机率出现这种问题

方案1

放弃已用空间的精度,从丢失精度的GB转回kb,再用总空间减去丢失精度的已用空间,得出剩余空间,剩余空间再转最大单位

let totalSize = 12345678;
let usedSize = 225654;
let unUsedSize;

let total = kbToOther(totalSize);  // * 14.7GB 假设
let usedSizeNoAccuracy = total * 1024 * 1024; // * 存在一位小数   = 15414067.2

unUsedSize = totalSize - usedSizeNoAccuracy; // * 存在一位小数    = xxxxx.8
let unUsed = kbToOther(unUsedSize); // * 保留一位,再次丢失精度        = xxxxx.8/1024/1024 .toFixed(1) 

抛弃已用空间的精度来保证总精度,但是由于进制为1024,最后可能会再次丢失剩余空间的精度,仍有一定机率出现相加与总和不一致问题

  • 注:可能出现其他单位,TB/MB/KB

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

有以下思路:

  • 全部计算结果都用整数,到了显示时候才转换为小数。
  • 采用一些具有高精度的库例如mathjs,能够支持非常高精度的小数运算

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...