java - 为什么 anyValue 是 double 值时 Sonar 中的 anyValue % 1 "silly math"?

标签 java sonarqube modulus

SonarQube 提出重大违规 Silly math should not be performed在我的代码中。描述说

Certain math operations are just silly and should not be performed because their results are predictable.

In particular, anyValue % 1 is silly because it will always return 0.

但在我的例子中,anyValue 是一个 double 值。这有效 as intended为了我。这是实际的代码:

double v = Double.parseDouble(Utils.formatDouble(Double.valueOf(value.getValue()), accuracy.intValue()));
boolean negative = v < 0;
v = Math.abs(v);
long deg = (long) Math.floor(v);

v = (v % 1) * 60;

分析器是否假设我的变量是 int(这是他们的错误)?还是我遗漏了什么?

最佳答案

这确实是一个错误,非常感谢您的报告。

问题出在代码中:https://github.com/SonarSource/sonar-java/blob/3.9/java-checks/src/main/java/org/sonar/java/checks/ConstantMathCheck.java#L117

其中绝对没有检查 % 运算符的左操作数的类型。

我刚刚提交了以下错误来处理这个问题:https://jira.sonarsource.com/browse/SONARJAVA-1457

关于java - 为什么 anyValue 是 double 值时 Sonar 中的 anyValue % 1 "silly math"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34639319/

相关文章:

php - Sonar 分析不起作用

c - 输入负数时,模数在 C 程序中返回不正确的数量

java - 在 JVM 中创建多线程以满足高用户负载

java - 使用 sonar/jacoco 单独找出新代码的代码覆盖率百分比

javascript - 如何抑制 SonarJS 中的单行错误?

c++ - 当操作数之一为负值时的模运算c++

C : Modulus operator on unsigned int gives unexpected output

java - 当我不能时,Maven 正在执行什么样的魔法来运行这个项目?

java - 以编程方式更新 Vaadin 网格

java - 如何通过 FileHandler 为 Logger 文件创建目录