Partager via


lnt-integer-float-division

Une expression de division entière a été implicitement convertie en type à virgule flottante.

La division est effectuée à l’aide d’opérations entières, ce qui a pour effet de tronquer la partie fractionnaire avant l’affectation de celle-ci au type de résultat à virgule flottante. Cette vérification n’indique pas toujours un bogue, car parfois la troncation est intentionnelle.

Dans Visual Studio 2022, la vérification lnt-integer-float-division est contrôlée par le paramètre Résultat de division tronqué dans les options de style de code C/C++. Pour plus d’informations sur la modification de ce paramètre, consultez Configurer le linter.

Dans Visual Studio 2019, la vérification lnt-integer-float-division est contrôlée par le paramètre Division entière convertie en type à virgule flottante dans les options de style de code C/C++. Pour plus d’informations sur la modification de ce paramètre, consultez Configurer le linter.

Exemples

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

Pour résoudre le problème

Le correctif suggéré par le linter consiste à caster explicitement l’un des opérandes de division en un type à virgule flottante, de façon à ce que le résultat de la division ne soit pas tronqué. Vous pouvez également utiliser un littéral à virgule flottante au lieu d’un cast.

float divide(int i, int j) {
    return static_cast<float>(i) / j;
}

float half(int i) {
    return i / 2.0;
}

Notes

Si la troncation est intentionnelle, vous pouvez ajouter un cast explicite pour empêcher l’avertissement.

float int_divide(int i, int j) {
    return static_cast<float>(i / j);  // Not flagged because of the explicit cast.
}

Voir aussi

Vue d’ensemble du linter de code IntelliSense pour C++