Masalah pembulatan dalam SQL

SQL memiliki tiga fungsi pembulatan.

Pembulatan konvensional

Fungsi "ROUND ()" SQL mengambil nilai yang ada dan membulatkannya ke angka desimal yang ditunjukkan. Formatnya adalah sebagai berikut:

ROUND ([value], [n], [1]))

Di sini, "[value]" adalah nilai desimal, dan "[n]" adalah jumlah digit yang harus dibulatkan nilai. Fungsi ini membulatkan nilai 0, 5 atau lebih, dan nilai 0, 49 atau kurang ke bawah. Memilih nilai "0" putaran ke nilai keseluruhan. Memilih nilai "-1" putaran ke kelipatan 10 terdekat. Parameter ketiga dari fungsi "ROUND ()", "[1]", memotong nomor dengan nomor desimal yang ditunjukkan jika ada nilai non-nol yang dipilih. Sumber signifikan dari masalah pembulatan yang tidak terduga adalah fiksasi parameter ketiga dengan kesalahan tipografi, dimana nomor hasil dipotong bukan bulat.

LANTAI dan PLAFON

SQL menggunakan fungsi "FLOOR ()" untuk memaksa pembulatan ke bawah nilai ke integer terdekat, dan "CEILING ()" berfungsi untuk membulatkan ke nilai terdekat. Kedua fungsi mengembalikan nilai integer. Bahkan menggunakan tipe data mengambang dengan jumlah tempat desimal tertentu, fungsi-fungsi ini mengembalikan nilai dengan nol setelah posisi desimal.

Jenis data yang direkomendasikan

Alasan yang paling mungkin untuk munculnya kesalahan pembulatan dalam SQL adalah penggunaan tipe data tak terduga untuk ekspresi numerik dalam fungsi "ROUND ()", atau penggunaan "FLOOR ()" atau "CEILING () "ketika Anda mengharapkan untuk mendapatkan tipe data desimal, bukan bilangan bulat. Jika fungsi SQL Anda memberi Anda hasil pembulatan yang tak terduga, pastikan bahwa "CAST ()" fungsi yang menunjukkan nomor memiliki tipe data "integer", "desimal", "uang" atau "smallmoney". Tipe data "desimal" terbatas hanya 38 digit total, sebuah batasan yang mempengaruhi beberapa orang di luar komunitas ilmiah.

Tipe data lainnya

Ada dua jenis data yang mengembalikan nilai numerik dan yang dapat menyebabkan masalah dengan fungsi "ROUND ()". Mereka adalah tipe numerik "nyata" dan "float" dalam SQL, yang digunakan untuk menyimpan fraksi sangat kecil yang dibulatkan di sebagian besar versi SQL, dengan tempat desimal terakhir dalam tipe data yang ditunjukkan. Beberapa implementasi putaran SQL ke nol, turun atau secara konvensional. Ketika Anda menerima data dalam database SQL yang mungkin menggunakan tipe "nyata" atau "float", gunakan fungsi "CAST ()" atau "CONVERT ()" untuk mengonversinya menjadi tipe data "desimal".