Ketidaktepatan Operasi Bahagian dalam PostgreSQL
Apabila melaksanakan operasi bahagian (/) dalam PostgreSQL, adalah penting untuk ambil perhatian bahawa hasilnya mungkin tidak seperti yang dijangkakan, terutamanya apabila berurusan dengan jenis data integer. Dalam kes ini, pembahagian memotong hasil ke arah sifar, yang boleh membawa kepada jawapan yang salah.
Untuk menggambarkan isu ini, pertimbangkan jadual bernama "perisian" dengan dua lajur integer: "dev_cost" dan "sell_cost". Jika "dev_cost" ialah 16000 dan "sell_cost" ialah 7500, membahagikan "dev_cost" dengan "sell_cost" menggunakan pertanyaan berikut:
select dev_cost / sell_cost from software ;
akan mengembalikan hasil 2. Walau bagaimanapun, jawapan yang betul ialah 3, menunjukkan bahawa 3 unit perisian perlu dijual untuk mendapatkan semula kos pembangunan.
Untuk menyelesaikan masalah ini isu, adalah perlu untuk memastikan bahawa sekurang-kurangnya satu daripada nilai dalam operasi bahagi dibuang ke jenis data apungan atau perpuluhan. Ini membolehkan pengiraan titik terapung yang tepat, mengekalkan bahagian pecahan hasil. Satu cara untuk mencapai ini ialah dengan menghantar lajur "dev_cost" kepada jenis perpuluhan dalam pertanyaan:
select cast(dev_cost as decimal) / sell_cost from software ;
Sebagai alternatif, anda boleh memudahkan operasi casting menggunakan operator cast jenis PostgreSQL:
select dev_cost::decimal / sell_cost from software ;
Akhir sekali, untuk mendapatkan hasil integer yang dibundarkan kepada nombor bulat terdekat, anda boleh menggunakan fungsi ceil() dalam pertanyaan:
select ceil(dev_cost::decimal / sell_cost) from software ;
Dengan mengikuti garis panduan ini, anda boleh mengatasi potensi ketidaktepatan yang timbul daripada pembahagian integer dalam PostgreSQL dan memastikan operasi matematik yang tepat pada data berangka anda.
Atas ialah kandungan terperinci Mengapa Bahagian Integer PostgreSQL Menghasilkan Keputusan Yang Tidak Dijangka, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!