次の方法で共有


lnt-integer-float-division

整数除算式は、浮動小数点型に暗黙的にキャストされていました。

この除算は整数演算を使用して行われます。これにより、小数部は、浮動小数点の結果型に割り当てられる前に切り捨てられます。 このチェックは常にバグを示すとは限りません。場合によっては、切り捨てが意図的に行われるからです。

Visual Studio 2022 では、lnt-integer-float-division チェックは、C/C++ コード スタイル オプションの [Truncated Division Result]\(切り捨てられた除算結果\) 設定によって制御されます。 この設定を変更する方法については、「リンターを構成する」を参照してください。

Visual Studio 2019 では、lnt-integer-float-division チェックは、C/C++ コード スタイル オプションの [Integer division converted to floating point]\(整数除算から浮動小数点に変換\) 設定によって制御されます。 この設定を変更する方法については、「リンターを構成する」を参照してください。

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

問題を解決する方法

リンターによって提案される修正は、除算オペランドの 1 つを浮動小数点型に明示的にキャストするというものです。これにより、除算結果は切り捨てられなくなります。 キャストではなく、浮動小数点リテラルを使用することもできます。

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

こちらもご覧ください

C++ 用 IntelliSense コード リンターの概要