java – 为什么anyValue%1“愚蠢数学”在声纳中anyValue是双倍?

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是一个双倍.这对我来说是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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...