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

标签 java findbugs

我有一个方法可以创建一个文件大小字符串来显示给用户。 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/

相关文章:

java - 如何将值从按钮传递到另一个类

java - 从 java 内部启动一个 bash 脚本,它在 jvm 退出后继续存在

java - FindBugs OBL_UNSATISFIED_OBLIGATION

java - @Nonnull 与不同的 IDE - 警告不必要的空检查

java - MALICIOUS_CODE EI_EXPOSE_REP 中等

java - 如何创建今天午夜和明天午夜的 Java Date 对象?

java - 有没有办法使用 Apache POI 修改 Microsoft Word 页脚?

java - 通过eclipse调试 View 分析线程

java - 专门针对gwt代码的代码分析器?

java - 在包上使用 @ParametersAreNonnullByDefault 注释时,IntelliJ 是否可以自动生成代码以对参数进行空检查