Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: String Comparison of Float
Abstract
Comparar um valor de ponto flutuante com um objeto
String
não é confiável e não deve ser feito.Explanation
Para comparar um valor de ponto flutuante com um objeto
Exemplo 1: O exemplo a seguir compara a variável de ponto flutuante com uma
String
, ele primeiro deve ser transformado em um objeto String
, o que normalmente é feito usando uma função como Double.toString()
. Dependendo do tipo e do valor da variável de ponto flutuante, quando convertida em um objeto String
, ela pode ser "NaN", "Infinity", "-Infinity", ter uma certa quantidade de casas decimais à esquerda contendo zeros ou incluir uma campo de expoente. Se convertida em uma String hexadecimal, a representação também poderá ser consideravelmente diferente.Exemplo 1: O exemplo a seguir compara a variável de ponto flutuante com uma
String
.
...
int initialNum = 1;
...
String resultString = Double.valueOf(initialNum/10000.0).toString();
if (s.equals("0.0001")){
//do something
...
}
...
References
[1] NUM11-J. Do not compare or inspect the string representation of floating-point values CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.dataflow.java.code_correctness_string_comparison_of_float