Saya tidak bisa memahami DECIMAL MySQL. Saya perlu baris untuk dapat memuat angka dari 00.0001 hingga 99.9999. Bagaimana saya menyusunnya agar berfungsi seperti itu?
Saya tidak bisa memahami DECIMAL MySQL. Saya perlu baris untuk dapat memuat angka dari 00.0001 hingga 99.9999. Bagaimana saya menyusunnya agar berfungsi seperti itu?
Jawaban:
Kolom DOUBLE tidak sama dengan kolom DECIMAL, dan Anda akan mendapat masalah jika Anda menggunakan kolom DOUBLE untuk data keuangan.
DOUBLE sebenarnya hanya versi FLOAT versi double precision (64 bit bukannya 32 bit) . Angka floating point adalah perkiraan perkiraan dari bilangan real dan tidak tepat. Bahkan, angka sederhana seperti 0,01 tidak memiliki representasi yang tepat dalam tipe FLOAT atau DOUBLE.
Kolom DECIMAL adalah representasi yang tepat, tetapi membutuhkan lebih banyak ruang untuk rentang angka yang jauh lebih kecil. Untuk membuat kolom yang mampu menyimpan nilai dari 0,0001 hingga 99,9999 seperti yang Anda minta, Anda perlu pernyataan berikut
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
Definisi kolom mengikuti format DECIMAL (M, D) di mana M adalah jumlah maksimum digit ( presisi ) dan D adalah jumlah digit di sebelah kanan titik desimal ( skala ).
Ini berarti bahwa perintah sebelumnya membuat kolom yang menerima nilai dari -99.9999 hingga 99.9999. Anda juga dapat membuat kolom DECIMAL TIDAK TANDA, mulai dari 0,0000 hingga 99,9999.
Untuk informasi lebih lanjut tentang MySQL DECIMAL, dokumen resmi selalu menjadi sumber yang bagus.
Ingatlah bahwa semua informasi ini berlaku untuk versi MySQL 5.0.3 dan lebih tinggi. Jika Anda menggunakan versi sebelumnya, Anda benar-benar harus meningkatkan.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Ini akan mengembalikan kesalahan di luar kisaran untuk nilai negatif. Anda juga dapat membuat FLOAT dan DOUBLE yang tidak ditandatangani. Manual: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Meskipun jawaban di atas tampaknya benar, hanya penjelasan sederhana untuk memberi Anda gambaran tentang cara kerjanya.
Misalkan kolom Anda diatur menjadi DECIMAL(13,4)
. Ini berarti bahwa kolom akan memiliki ukuran total 13 digit di mana 4 di antaranya akan digunakan untuk representasi presisi.
Jadi, dalam ringkasan, untuk kolom itu Anda akan memiliki nilai maksimum: 999999999.9999
Ada solusi yang benar dalam komentar, tetapi untuk meringkasnya menjadi satu jawaban:
Anda harus menggunakan DECIMAL (6,4).
Kemudian Anda dapat memiliki 6 jumlah digit, 2 sebelum dan 4 setelah titik desimal (skala). Setidaknya sesuai dengan ini .
MySQL 5.x spesifikasi untuk datatype desimal adalah: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Jawaban di atas salah dalam mengatakan bahwa desimal tak bertanda tidak mungkin.
Untuk menentukan bidang yang memungkinkan hanya desimal ditandatangani, dengan panjang total 6 digit, 4 di antaranya adalah desimal, Anda akan menggunakan: DECIMAL (6,4) UNSIGNED
.
Anda juga dapat membuat tipe data FLOAT dan DOUBLE yang tidak ditandatangani (mis. Tidak negatif).