A angka di blakanga koma mysql

Mengupas 3 Fungsi Pembulatan pada MySQL.

SeemutKomputer.Com - pada dasarnya Fungsi yang ada pada MySQL untuk pembulatan dengan tujuan untuk membulatkan nilai
yang dihasilkan, guna umtuk mempermudah baik secara tampilan maupun perhitungan.
mengapa demikian? karena pada saat nilai yang dihasilkan memiliki nilai koma yang panjang, maka akan menyulitkan pada
saat akan melakukan perhitungan.

Beberapa pembulatan angka yang dapat dilakukan dengan menggunakan MySQL Antara lain adalah :

1. pembulatan tanpa ada perubahan hanya mengurangi digit yang akan ditampilkan dibelakang koma.
hal ini dapat dilakukan dengan menggunakan fungsi round pada SQL.

formulanya adalah:
Select ROUND (angka yang akan dibulatkan, jumlah angka dibelakang koma)

Contoh :
select round(5.0090 , 2) from dual ==> 5.00 // round digunakan untuk menampilkan nilai, dan angka 2 menentukan jumlah angka dibelakang koma.
atau contoh lain seperti
select round(5.0090 , 3) from dual ==> 5.009

2. pembulatan dengan menghilangkan koma, yaitu hanya menampilkan nilai depan saja.
hal ini dapat dilakukan dengan mnggunakan fungsi FLOOR pada SQL.

formulanya adalah:
Select FLOOR (angka yang akan dibulatkan)

select floor(5.92) from dual ==> 5 // menampilkan nilai batas bawah (5.92 nilai dasarnya adalah 5.00 maka akan dihasilkan 5)
select floor(5.19) from dual ==> 5

3. pembulatan dengan menambah nilai, yaitu dengan menampilkan nilai bulat setelah koma.

formulanya adalah:
Select CEIL (angka yang akan dibulatkan)

select ceil(5.19) from dual ==> 6 // menampilkan nilai diatas koma (5.19 jika dinaikan maka nilanya adalah 6.00 maka akan dihasilkan 6)
select ceil(5.52) from dual ==> 6

Demikian pembahasan mengenai Fungsi Pembulatan pada MySQL, semoga bermanfaat.

Setelah membahas tipe data string, kali ini penulis akan membahas kupas tuntas tipe data numerik. Tipe data numerik pada MySQL sama seperti tipe data pada bahasa pemrograman lainnya yakni untuk menyimpan nilai numerik (angka) dengan jenis bilangan yang dapat disimpan adalah bilangan bulat positif dan negatif, serta pecahan positif dan negatif baik dengan presisi tunggal maupun dengan presisi ganda, untuk lebih lengkapnya lihat tabel berikut :

Tipe DataKeteranganJangkauanUkuran
Tinyint Menyimpan data bilangan bulat positif dan negatif -128 s/d 127 atau 0 s/d 255 1 Byte
Smallint Menyimpan data bilangan bulat positif dan negatif 32,768 s/d 32,767 atau 0 s/d 65535 2 Byte
Mediumint Menyimpan data bilangan bulat positif dan negatif -8,388,608 s/d 8,388,607 atau 0 s/d 16,777,215 3 Byte
Int Menyimpan data bilangan bulat positif dan negatif -2,147,483,648 s/d 2,147,483,647 atau 0 s/d 4,294,967,295 4 Byte
Bigint Menyimpan data bilangan bulat positif dan negatif -9,223,372,036,854,775,808 s/d 9,223,372,036,854,775,807 atau 0 s/d 18,446,744,073,709,551,615 8 Byte

1. Integer

Bentuk umum Format query tipe data integer mysql adalah sebagai berikut :

Int (M) | Unsigned | Zerofill

Tanda (M) merujuk pada length / panjang nilai untuk menampilkan data dimana biasanya digunakan bersamaan dengan zerofill yaitu memberi angka 0 di kiri data/nilai yang disimpan sebagai pengganti spasi, lebih jelasnya dapat melihat contoh berikut:

create table intejer (kolom_1 int(5) zerofill, kolom_2 int zerofill)
0 row(s) affected, 3 warning(s): 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column. 1681 Integer display width is deprecated and will be removed in a future release. 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column.	0.109 sec

insert into intejer values (123788, 123788)
1 row(s) affected	0.031 sec
insert into intejer values (123, 123)
1 row(s) affected	0.016 sec
select * from intejer;
+---------+------------+
| kolom_1 | kolom_2    |
+---------+------------+
|  123788 | 0000123788 |
|   00123 | 0000000123 |
+---------+------------+
2 rows in set (0.00 sec)

Dapat dilihat perbedaannya pada kolom yang memiliki panjang nilai (kolom_1) dengan kolom yang tidak memiliki panjang nilai (kolom_2) dimana pada kolom_1 memiliki panjang nilai sebanyak 5 sementara data dengan nilai 123 memiliki nilai 0 di angka depannya akibat penggunaan zerofill namun pada nilai 123788 tidak memiliki angka 0 dikarenakan sudah melewati panjang nilai, sementara pada kolom_2 memiliki angka 0 yang cukup banyak ini dikarenakan tidak memiliki panjang nilai sehingga panjang nilai di set ke default yakni 10 digit. Selain itu jika menggunakan zerofill kita tidak dapat menginput nilai negatif, contohnya seperti berikut:

create table intejer (kolom_1 int(5) zerofill, kolom_2 int zerofill)
0 row(s) affected, 3 warning(s): 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column. 1681 Integer display width is deprecated and will be removed in a future release. 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column.	0.109 sec

insert into intejer values (123, -123)
Error Code: 1264. Out of range value for column 'kolom_2' at row 1	0.000 sec

Maka dalam hal ini semisal kita mendeklarasikan int(5), kita tetap dapat menginput data berdasarkan jangkauan tipe datanya yakni -2,147,483,648 s/d 2,147,483,647 dengan jumlah digit maksimal 10 dan bukan berarti 99999, selain itu, penggunaan dari length dan zerofill sudah dianggap usang/kadaluarsa dan akan segera dihapus pada rilis mendatang.

Penggunaan unsigned pada tipe data integer adalah untuk menjangkau nilai positif yang lebih tinggi dengan mengorbankan nilai negatif, artinya angka yang disimpan dimulai dari 0 s/d 4.294.483.647 dan tidak dapat menyimpan nilai negatif, sedangkan jika dalam pendeklarasian tidak menggunakan unsigned maka data yang dapat disimpan memiliki jangkauan dari -2.147.483.648 sampai 2.147.483.647, contohnya seperti berikut :

create table intejer (kolom_1 int unsigned, kolom_2 int)
0 row(s) affected 0.281 sec
insert into intejer values (0, -2147483648)
1 row(s) affected 0.062 sec
insert into intejer values (-1, -2147483648)	
Error Code: 1264. Out of range value for column 'kolom_1' at row 1	0.000 sec

Dapat dilihat pada kolom kolom_1 yang menggunakan tanda unsigned dapat menyimpan nilai 0, namun tidak dapat menyimpan nilai negatif meski itu -1 sehingga menampilkan pesan error code 1264 yang berarti nilai yang di insert diluar jangkauan. Dengan tipe data integer kita tidak dapat menyimpan nilai pecahan, yaitu nilai dibelakang koma, kalau kita tetap menggunakan integer maka akan terlihat seperti berikut :

insert into intejer values (2147.483647, 2983)	
1 row(s) affected	0.046 sec
mysql> select * from intejer;
+---------+---------+
| kolom_1 | kolom_2 |
+---------+---------+
|    2147 |    2983 |
+---------+---------+
1 row in set (0.00 sec)

Dapat dilihat nilai yang disimpan hanya nilai yang berada di depan titik saja sementara nilai yang ada dibelakangnya diabaikan / tidak disimpan, untuk mengatasi hal ini mysql menyediakan tipe data fixed point (decimal) untuk menyimpan nilai bilangan pecahan.


2. Fixed Point

Format query untuk tipe data desimal

Decimal (M, D) | Unsigned | Zerofill

Pada penggunaan tipe data pecahan desimal M adalah jumlah digit keseluruhan atau dikenal sebagai nilai presisi, dan D adalah jumlah digit dibelakang koma dimana nilai maksimal M adalah 65 dan nilai D 30 dengan catatan nilai D tidak lebih besar dari nilai M, contohnya seperti berikut :

create table pecahan (kolom_1 decimal, kolom_2 decimal (2, 4)) 
Error Code: 1427. For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'kolom_2'). 0.000 sec

Dapat dilihat pada kolom_2 dengan nilai D lebih besar dari M maka menampilkan error code 1427 yang berarti M harus >= D, selain itu jika kita tidak menyertakan M dan D seperti pada kolom_1 saat pendeklarasian maka secara default akan di set (10, 0), sehingga contoh yang benar adalah sebagai berikut:

create table pecahan (kolom_1 decimal, kolom_2 decimal (8, 6))
0 row(s) affected 0.203 sec     

Pada kolom_2 dari contoh diatas menunjukkan kita dapat menyimpan 8 digit angka, dengan 2 digit di depan koma dan 6 dibelakang koma sehingga nilai maksimal yang dapat di input adalah -99.999999 s/d 99.999999, kita juga tidak dapat menambah angka didepan koma meskipun dengan mengurangi digit dibelakang koma seperti contoh berikut:

insert into pecahan values (11, 99.99999)
1 row(s) affected	0.015 sec
insert into pecahan values (11, 999.9999)
Error Code: 1264. Out of range value for column 'kolom_2' at row 1	0.000 sec

Salah satu karakteristik tipe data desimal pada mysql adalah tidak bisa menyimpan nilai desimal yang diawali dengan angka 0 seperti contoh berikut ini:

create table desimal (kolom_1 decimal(5,1));
Query OK, 0 rows affected (0.46 sec)

insert into desimal values (0003.1);
Query OK, 1 row affected (0.23 sec)

select * from desimal;
+---------+
| kolom_1 |
+---------+
|     3.1 |
+---------+
1 row in set (0.00 sec)

Maka nilai yang disimpan hanya nilai selain 0 saja, meskipun dengan kombinasi angka 0 berada di tengah semisal 0102.2 akan menjadi 12.2. Lalu bagaimana kalau jadinya seperti berikut ini:

create table desimal (kolom_1 decimal(2,2), kolom_2 decimal(2,2))
0 row(s) affected	0.218 sec

Kira-kira berapa nilai minimum dan maksimum yang dapat dijangkau? -9.99? 9.99? Jawabannya salah. Kok bisa? Bukannya M disana 2 menandakan 2 digit? Ya benar, maksimal angka yang dapat disimpan adalah 2 digit namun angka dibelakang koma merupakan nila fixed (tetap) sehingga nilai dibelakang koma lebih diutamakan, maka jadinya seperti berikut:

insert into desimal values (-0.99, 0.99)
1 row(s) affected	0.203 sec
insert into desimal values (-1.99, 1.99)
Error Code: 1264. Out of range value for column 'kolom_1' at row 1	0.000 sec
insert into desimal values (-1.00, 1.00)
Error Code: 1264. Out of range value for column 'kolom_1' at row 1	0.000 sec

Dapat dilihat ketika mencoba menginput nilai -1.99 s/d 1.99 bahkan 1.00 justru menampilkan error, hal tersebut dikarenakan tipe data desimal pada mysql disimpan dalam format biner yang mengelompokan sembilan digit desimal menjadi 4 byte seperti pada tabel berikut:

Sisa Digit Jumlah Memori 
 0 0 byte 
1-2  1 byte 
3-4  2 byte 
5-6  3 byte 
7-9  4 byte 

Maka dari contoh diatas sisa digitnya adalah 0 disimpan dengan jumlah memori 0 bytes sehingga angka 0 dapat disimpan. Jadi jika kalian mendefinisikan tabel di awal (5,2) maka sisa digitnya adalah 3 sedangkan 2 digitnya di alokasikan untuk angka dibelakang koma namun kalian tidak dapat menyimpan nilai yang diawali dengan 0 pada tipe data desimal selama sisa digit masih tersedia. Sama seperti integer, tipe data decimal juga dapat menggunakan unsigned dan zerofill, biasanya tipe data decimal digunakan untuk menyimpan nilai yang bersifat keuangan.

A angka di blakanga koma mysql

Untuk mempelajari pembahasan lainnya silahkan lihat halaman daftar isi.