2016-01-06 12 views
10

SonarQube solleva la violazione principale Silly math should not be performed nel mio codice. La descrizione dicePerché in Anyar c'è qualche valore% 1 "sciocco matematico" quando anyValue è un doppio?

Alcune operazioni matematiche sono semplicemente sciocche e non devono essere eseguite perché i loro risultati sono prevedibili.

In particolare, anyValue% 1 è stupido perché sarà sempre tornare 0.

Nel mio caso, però, anyValue è un doppio. E questo funziona per me as intended. Ecco il codice vero e proprio:

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; 

è l'analizzatore di assumere la mia variabile è un int (che è la loro bug)? O mi manca qualcos'altro?

+4

* * suona come un insetto dalla loro parte. Solo per motivi di completezza, puoi mostrare il codice esatto in cui ottieni la violazione? – luk2302

+1

@pabrams perché non dovrebbe? – luk2302

+0

Perché non c'è niente di speciale in questo ... dovresti avere una ragione per alzare il limite o meno. Ma qualunque cosa ... Immagino di non essere molto produttivo facendo questa domanda. – pabrams

risposta

2

Si potrebbe fare la tua espressione più esplicita, cambiando in modo da utilizzare esplicita doppia costante come:

(v % 1.0d) * 60 
+4

'1.0' o '1d'. '1.0d' sembra estraneo. – Andreas

+0

Hai ragione. Il doppio è l'impostazione predefinita e potrebbe essere omesso. Quindi come '0'. –

+1

Questa è una buona idea. Ho confermato che rimuove la violazione ed è molto più esplicito. Continuerò a sollevare questo caso con gli sviluppatori. –