WAP手机版 RSS订阅 加入收藏  设为首页
电影
当前位置:首页 > 电影

传播最广的一段 Java 代码曝出 Bug

时间:2019/12/7 20:36:26  作者:  来源:  浏览:0  评论:0
内容摘要: 2010 年的时候,我整天泡在 Stack Overflow 上回答问题,希望可以提高自己的知名度。当时,有一个问题吸引了我的注意:如何以人类可读的格式输出字节数?举个例子,将“123456789 字节”转换为“123.5 MB”的格式输出。复制粘贴一时爽:传播最广的一段 Ja...
    2010 年的时候,我整天泡在 Stack Overflow 上回答问题,希望可以提高自己的知名度。当时,有一个问题吸引了我的注意:如何以人类可读的格式输出字节数?举个例子,将“123456789 字节”转换为“123.5 MB”的格式输出。

复制粘贴一时爽:传播最广的一段 Java 代码曝出 Bug这是现在的截图,但问题确实是这个。

这里的隐含范式在于所得到的字符串值应该在 1 到 999.9 之间,后面再跟上一个大小合适的单位。当时已经有人给了一条回应。答案中的代码以循环为基础,基本思路非常简单:尝试所有单位,从最大(EB,即 1018 字节)到最小(B,即 1 字节),而后使用一种显示数量小于实际字节数量的单位。用伪代码写出来,基本是这么个意思:

一般来说,如果发布的正确答案已经获得了正分数,那后发者很难追上。在 Stack Overflow 上,这就叫“拔枪最快的赢”。不过,我认为这个答案有缺陷,所以准备重新改改。我意识到,无论是 KB、MB 还是 GB,所有单位的本质实际都是 1000 的幂(当然,按 IEC 标准来讲是 1024),意味着应该可以使用对数而非循环来计算正确的量级单位。

基于以上思路,我发布了下列内容:

当然,这段代码可读性不高,而且 log/pow 也可能在一定程度上影响执行效率,但至少这里没有循环,几乎不涉及分支,我觉得还是比较整洁的。

这里面使用的数学方法非常简单。字节计数表示为 byeCount=1000s , 其中的 s 代表小数点后的位数(以二进制表示,则使用 1024 为基数),求解 s,即可得出 

相关评论
本站所有站内信息仅供娱乐参考,不作任何商业用途,不以营利为目的,专注分享快乐,欢迎收藏本站!
所有信息均来自:百度一下 (澳门金沙网上娱乐)
晋icp备10005668号-2