Partilhar via


lnt-integer-float-division

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.
}

Ver também

Visão geral do linter de código IntelliSense para C++