3

我有一个方法可以创建一个文件大小的字符串来显示给用户。FindBugs 是说一个int 被转换成一个浮点数,然后传递给 Math.round

 public static String createFileSizeString(long size)
 {
    if (size < 1024)
    {
       return size + " bytes";
    }
    else if (size < 1048576)
    {
       return (Math.round(((size * 10) / 1024)) / 10) + " KB";
    }
    else
    {
       return (Math.round(((size * 10) / 1048576)) / 10) + " MB";
    }
 }

FindBugs 继续说:“这个操作应该始终是空操作,因为将整数转换为浮点数应该给出一个没有小数部分的数字。很可能是生成要传递给 Math 的值的操作。 round 旨在使用浮点运算来执行。”

它是如何无操作的?我应该添加一个明确的演员(size * 10) / 1024表以便((float)size * 10) / 1024出现吗?

4

1 回答 1

3

编码

((size * 10) / 1024)

是一个整数,如果你四舍五入,你应该每次都得到相同的数字。

也许你的意图是四舍五入

return size * 10 / 1024 / 10.0 + " KB";

或四舍五入。

return (size * 10 + 512) / 1024 / 10.0 + " KB";

或使用 Math.round 几乎相同的东西

return Math.round(size / 102.4) / 10.0 + " KB";

这将为您提供带一位小数的数字 KB。

于 2013-04-17T15:24:31.800 回答