Field size Decimal pada Tipe data Number di MS Access mempunyai keunikan yang membedakannya dengan field size yang lain. Perbedaan itu terletak pada properti Precision dan Scale. Properti Precision merujuk pada jumlah digit maksimum dalam sekumpulan angka. Sementara itu, properti Scale adalah jumlah digit di sebelah kanan tanda desimal yang ada pada sekumpulan angka.
Sebagai contoh, sekumpulan angka 123.45 mempunyai properti Precision sebanyak 5 ("12345") dan properti Scale sebanya 2 ("45"). Dalam contoh ini, tanda titik berfungsi sebagai pemisah desimal. Properti Precision dan Scale mengatur seberapa besar angka yang boleh dimasukkan ke dalam sebuah field. Dengan Precision=5 dan Scale=2 seperti contoh di atas, maka angka terbesar yang bisa dimasukkan adalah 999.99. Sedangkan angka terkecil yang bisa dimasukkan adalah -999.99.
Sebagai ilustrasi, misal ada tabel dengan sebuah field yang mempunyai Name=HargaSatuan dan Caption=Harga Satuan seperti terlihat di gambar bawah. Properti Precision=5 dan Scale=2.
Saat tabel itu dibuka dengan mode Datasheet View, angka yang bisa dimasukkan di field HargaSatuan terletak di kisaran -999.99 dan +999.99. Bila kita mencoba mengetikkan angka 1000 di field itu, maka akan muncul pesan kesalahan "The decimal field's precision is too small to accept the numeric you attempted to add". Pesan kesalahan yang sama akan muncul saat kita memasukkan angka -1000.
Hal ini terjadi karena kita telah mengatur properti Precision=5 dan Scale=2. Artinya:
Fungsi String(byPrecision, "9") akan mengulang karakter 9 sebanyak byPrecision kali. Selanjutnya, karakter ini dikonversi menjadi angka numerik decimal yang kemudian dibagi 10 pangkat byScale.
Untuk memperoleh angka maksimum dan minimum dari sebuah field size desimal, kita dapat menggunakan fungsi berikut ini:
Sebagai contoh, sekumpulan angka 123.45 mempunyai properti Precision sebanyak 5 ("12345") dan properti Scale sebanya 2 ("45"). Dalam contoh ini, tanda titik berfungsi sebagai pemisah desimal. Properti Precision dan Scale mengatur seberapa besar angka yang boleh dimasukkan ke dalam sebuah field. Dengan Precision=5 dan Scale=2 seperti contoh di atas, maka angka terbesar yang bisa dimasukkan adalah 999.99. Sedangkan angka terkecil yang bisa dimasukkan adalah -999.99.
Sebagai ilustrasi, misal ada tabel dengan sebuah field yang mempunyai Name=HargaSatuan dan Caption=Harga Satuan seperti terlihat di gambar bawah. Properti Precision=5 dan Scale=2.
Saat tabel itu dibuka dengan mode Datasheet View, angka yang bisa dimasukkan di field HargaSatuan terletak di kisaran -999.99 dan +999.99. Bila kita mencoba mengetikkan angka 1000 di field itu, maka akan muncul pesan kesalahan "The decimal field's precision is too small to accept the numeric you attempted to add". Pesan kesalahan yang sama akan muncul saat kita memasukkan angka -1000.
Hal ini terjadi karena kita telah mengatur properti Precision=5 dan Scale=2. Artinya:
- Angka di sebelah kanan tanda desimal (pada gambar di atas di belakang titik) sepanjang 2 digit (merupakan nilai properti Scale), dengan angka maksimum adalah 99.
- Angka bulat di sebelah kiri tanda desimal sepanjang Precision-Scale=5-2=3 digit, dengan angka maksimum/minimum adalah +/- 999.
- Jadi angka yang bisa dimasukkan ke dalam field HargaSatuan adalah +/- 999.99.
CDec(String(byPrecision, "9")) / 10 ^ byScale
Fungsi String(byPrecision, "9") akan mengulang karakter 9 sebanyak byPrecision kali. Selanjutnya, karakter ini dikonversi menjadi angka numerik decimal yang kemudian dibagi 10 pangkat byScale.
Untuk memperoleh angka maksimum dan minimum dari sebuah field size desimal, kita dapat menggunakan fungsi berikut ini:
Public Enum enumMinMaks angkaMinimum = 1 angkaMaksimum = 2 angkaNol = 0 End Enum Function rangeAngkaDecimal(Optional intEnumMinMaks As enumMinMaks, Optional byPrecision As Byte, Optional byScale As Byte) As Variant Dim maxDecimal, minDecimal, tempDecimal As Variant maxDecimal = CDec("9,999,999,999,999,999,999,999,999,999") minDecimal = CDec("-9,999,999,999,999,999,999,999,999,999") If byScale > byPrecision Or byPrecision > 28 Then rangeAngkaDecimal = "Error" Exit Function End If If intEnumMinMaks = 0 Then rangeAngkaDecimal = 0 If intEnumMinMaks = angkaMinimum Then If byPrecision = 0 Then rangeAngkaDecimal = minDecimal Exit Function End If rangeAngkaDecimal = -(CDec(String(byPrecision, "9")) / 10 ^ byScale) End If If intEnumMinMaks = angkaMaksimum Then If byPrecision = 0 Then rangeAngkaDecimal = maxDecimal Exit Function End If rangeAngkaDecimal = CDec(String(byPrecision, "9")) / 10 ^ byScale End If End FunctionFungsi rangeAngkaDecimal di atas mempunyai tiga parameter yang semuanya opsional. Berikut ini berbagai macam contoh aplikasi fungsi rangeAngkaDecimal di Immediate Window.
?rangeAngkaDecimal 0 ?rangeAngkaDecimal(angkaMaksimum,5,2) 999.99 ?rangeAngkaDecimal(angkaMinimum,5,2) -999.99 ?rangeAngkaDecimal(angkaMaksimum,28,0) 9999999999999999999999999999 ?rangeAngkaDecimal(angkaMinimum,28,0) -9999999999999999999999999999 ?rangeAngkaDecimal(angkaMaksimum,28,6) 9999999999999999999999.999999 ?rangeAngkaDecimal(angkaMinimum,28,6) -9999999999999999999999.999999 ?rangeAngkaDecimal(,2,6) Error '(byPrecision harus lebih besar dari byScale)
Comments
Post a Comment