Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
}