Dulu aku pernah ngalamin masalah dengan tipe data real, karena tingkat akurasinya yang terbatas. Akibatnya, semua nilai desimal, umumnya untuk menyimpan data nilai uang, aku ubah semua menjadi tipe double precision (float8).
Saat aku ngoprek program akuntansi, ternyata tipe data double precision tersebut membawa masalah. Masalah adalah dalam penyimpananannya, data yang disimpan tidak disimpan secara exact, melainkan menggunakan pendekatan.
Jadi misal data 234.53 disimpan menjadi 234.529999999998
Saat ditampilkan, baik melalui aplikasi yang kubuat, lewat pgAdminIII atau phpPgAdmin, semuanya lancar, tetap tampil 234.53. Data ini muncul saat kita meng-dump database untuk backup.
Namun masalahnya bukan saat backup. Karena tidak bersifat exact dan cara penyimpanan yang "aneh" tersebut, akibatnya sering terjadi kekacauan saat melakukan operasi numerik sederhana (penjumlahan, summary) atau pembandingan.
Kadang operasi sederhana seperti SUM(xxx) dimana xxx bertipe double, hasilnya tidak utuh dan ketika dibandingkan hasilnya salah. Misal ada data:
23.54
-20.04
-3.5
Jika di SUM(data) = 0, hasilnya akan false, karena SUM(data) tidak menghasilkan 0 melainkan 0.0000000008
Solusinya adalah dengan mengganti semua data bertipe double precision menjadi tipe data numeric.
NB: akibat error tersebut, beberapa hari harus panas kuping gara-gara diomelin customer :(
Saat aku ngoprek program akuntansi, ternyata tipe data double precision tersebut membawa masalah. Masalah adalah dalam penyimpananannya, data yang disimpan tidak disimpan secara exact, melainkan menggunakan pendekatan.
Jadi misal data 234.53 disimpan menjadi 234.529999999998
Saat ditampilkan, baik melalui aplikasi yang kubuat, lewat pgAdminIII atau phpPgAdmin, semuanya lancar, tetap tampil 234.53. Data ini muncul saat kita meng-dump database untuk backup.
Namun masalahnya bukan saat backup. Karena tidak bersifat exact dan cara penyimpanan yang "aneh" tersebut, akibatnya sering terjadi kekacauan saat melakukan operasi numerik sederhana (penjumlahan, summary) atau pembandingan.
Kadang operasi sederhana seperti SUM(xxx) dimana xxx bertipe double, hasilnya tidak utuh dan ketika dibandingkan hasilnya salah. Misal ada data:
23.54
-20.04
-3.5
Jika di SUM(data) = 0, hasilnya akan false, karena SUM(data) tidak menghasilkan 0 melainkan 0.0000000008
Solusinya adalah dengan mengganti semua data bertipe double precision menjadi tipe data numeric.
NB: akibat error tersebut, beberapa hari harus panas kuping gara-gara diomelin customer :(
Comments