int值转换为float,然后传递给Math.round

时间:2013-04-17 15:19:33

标签: java findbugs

我有一个创建文件大小String的方法,用于向用户显示。 FindBugs说 int被强制转换为float,然后传递给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继续说:“此操作应始终为无操作,因为将整数转换为float应该给出一个没有小数部分的数字。很可能是生成值的操作要传递Math.round的目的是使用浮点运算来执行。“

怎么做无操作?我应该向(size * 10) / 1024添加一个明确的强制转换,以便显示((float)size * 10) / 1024吗?

1 个答案:

答案 0 :(得分:2)

代码

((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。