我有一个创建文件大小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
吗?
答案 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。