Bagikan melalui


lnt-integer-float-division

Ekspresi pembagian bilangan bulat secara implisit ditransmisikan ke tipe floating-point.

Pembagian dilakukan menggunakan operasi bilangan bulat, yang memotong bagian pecahan sebelum ditetapkan ke jenis hasil floating-point. Pemeriksaan ini tidak selalu menunjukkan bug, karena terkadang pemotongan disengaja.

Pada Visual Studio 2022, lnt-integer-float-division pemeriksaan dikontrol oleh pengaturan Hasil Divisi Terpotong dalam opsi C/C++ Code Style. Untuk informasi cara mengubah pengaturan ini, lihat Mengonfigurasikan linter.

Pada Visual Studio 2019, lnt-integer-float-division pemeriksaan dikontrol oleh divisi Bilangan Bulat yang dikonversi ke pengaturan titik mengambang dalam opsi C/C++ Code Style. Untuk informasi cara mengubah pengaturan ini, lihat Mengonfigurasikan linter.

Contoh

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

Cara menyelesaikan masalah

Perbaikan yang disarankan linter adalah secara eksplisit mentransmisikan salah satu operand divisi ke jenis floating-point, sehingga hasil pembagian tidak terpotong. Anda juga dapat menggunakan literal floating-point alih-alih cast.

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

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

Keterangan

Jika pemotongan disengaja, Anda dapat menambahkan transmisi eksplisit untuk mencegah peringatan.

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

Lihat juga

Linter kode IntelliSense untuk gambaran umum C++