Поделиться через


lnt-integer-float-division

Выражение целочисленного деления неявно приводится к типу с плавающей запятой.

Деление выполняется с помощью целочисленных операций, в результате чего дробная часть усекается до назначения типу результата с плавающей запятой. Эта проверка не всегда указывает на ошибку, поскольку иногда усечение выполняется намеренно.

В Visual Studio 2022 проверка lnt-integer-float-division контролируется настройкой Результат усеченного деления в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.

В Visual Studio 2019 проверка lnt-integer-float-division контролируется настройкой Целочисленное деление, преобразованное в число с плавающей запятой в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.

Примеры

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

Устранение проблемы

Исправление, предлагаемое анализатором кода, — явно привести один из операндов деления к типу с плавающей запятой, чтобы результат деления не усекался. Можно также использовать литерал с плавающей запятой вместо приведения.

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

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

Замечания

Если усечение выполняется намеренно, можно добавить явное приведение, чтобы предотвратить появление предупреждения.

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

См. также

Обзор анализатора кода IntelliSense для C++