Skip to main content

Mengenal Field Size Decimal pada Tipe Data Number di MS Access

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:
  1. 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.
  2. Angka bulat di sebelah kiri tanda desimal sepanjang Precision-Scale=5-2=3 digit, dengan angka maksimum/minimum adalah +/- 999.
  3. Jadi angka yang bisa dimasukkan ke dalam field HargaSatuan adalah +/- 999.99.
Bila byPrecision=nilai properti Precision dan byScale=nilai properti Scale, maka nilai maksimum field dengan size desimal bila dirumuskan dalam VBA adalah sebagai berikut:

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 Function
Fungsi 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

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access