我有一个方法可以创建一个文件大小字符串来显示给用户。 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
出现?
最佳答案
代码
((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。
关于java - int 值转换为 float,然后传递给 Math.round,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16063939/