Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Uma expressão de divisão inteira foi implicitamente convertida para um tipo de ponto flutuante.
A divisão é realizada usando operações inteiras, que truncam a parte fracionária antes de ser atribuída ao tipo de resultado de ponto flutuante. Essa verificação nem sempre indica um bug, porque às vezes o truncamento é intencional.
No Visual Studio 2022, a verificação lnt-integer-float-division
é controlada pela definição Resultado de Divisão Truncada nas opções de estilo de código C/C++. Para obter informações sobre como alterar essa configuração, consulte Configurar o linter.
No Visual Studio 2019, a lnt-integer-float-division
verificação é controlada pela divisão Integer convertida em configuração de ponto flutuante nas opções de Estilo de Código C/C++. Para obter informações sobre como alterar essa configuração, consulte Configurar o linter.
Exemplos
float divide(int i, int j) {
return i / j; // Flagged: The integer division result is implicitly cast to float.
}
float half(int i) {
return i / 2; // Flagged: An integer literal is used.
}
Como corrigir o problema
A correção que o linter sugere é converter explicitamente um dos operandos de divisão para um tipo de ponto flutuante, para que o resultado da divisão não seja truncado. Você também pode usar um literal de ponto flutuante em vez de um elenco.
float divide(int i, int j) {
return static_cast<float>(i) / j;
}
float half(int i) {
return i / 2.0;
}
Observações
Se o truncamento for intencional, poderá adicionar uma conversão explícita para evitar a mensagem de aviso.
float int_divide(int i, int j) {
return static_cast<float>(i / j); // Not flagged because of the explicit cast.
}