2016-01-06 2 views
10

SonarQube вызывает серьезное нарушение Silly math should not be performed в моем коде. В описании написано:Почему anyValue% 1 «глупая математика» в сонаре, когда anyValue является двойным?

Определенные математические операции просто глупые и не должны быть выполнены , потому что их результаты предсказуемы.

В частности, anyValue% 1 глупо, потому что он всегда будет возвращать 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 (который является их ошибка)? Или я пропустил что-то еще?

+4

* * звучит как ошибка на их стороне. Просто ради завершения, можете ли вы показать точный код, где вы получаете нарушение? – luk2302

+1

@pabrams, почему это не так? – luk2302

+0

Потому что в этом нет ничего особенного ... у вас должна быть причина для продвижения или понижения. Но что бы то ни было ... Я думаю, что я не очень продуктивен, задавая этот вопрос. – pabrams

ответ

4

Это действительно ошибка, так что спасибо большое за информацией об этом.

Проблема здесь в коде: 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

2

Вы можете сделать ваше выражение более явным, изменив его использовать явный двойной константы как:

(v % 1.0d) * 60 
+4

'1.0' или '1d'. '1.0d' кажется посторонним. – Andreas

+0

Вы правы. Двойной является значением по умолчанию и может быть опущен. Так как '0'. –

+1

Это хорошая идея. Я подтвердил, что он устраняет нарушение и гораздо более явственно. Я все равно подниму этот случай с разработчиками. –

Смежные вопросы