Rumah >pangkalan data >tutorial mysql >Mengapa Bahagian Integer PostgreSQL Menghasilkan Keputusan Yang Tidak Dijangka, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Bahagian Integer PostgreSQL Menghasilkan Keputusan Yang Tidak Dijangka, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Patricia Arquetteasal
2024-12-19 15:39:10130semak imbas

Why Does PostgreSQL Integer Division Produce Unexpected Results, and How Can I Fix It?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn