[304]. Fungsi Pengganti Kelemahan Round() Pada Visual Basic
---------------------------------------------------------------------------------
Author : SPYRO KiD
Contact : admin{~@~}spyrozone.net
CopyLEFT (c) 2010++ www.spyrozone.net All Rights Reserved
22/07/2010 9.12.31 WIB
---------------------------------------------------------------------------------
Studi Kasus
Ketika saya sedang menangani project Sistem Informasi Giling PG. Pesantren Baru di Kota Kediri tempo hari, saya mendapat sebuah kasus kecil yang cukup menarik. Salah satu tugas saya adalah membuat aplikasi dengan vb6 untuk menangkap nilai dari sebuah Timbangan digital yang mengunakan serial comm, lalu secara otomatis melemparnya ke sebuah input text pada browser dengan membuat sebuah
firefox extension sebagai jembatannya.
Client menginginkan agar nilai pada timbangan yang awalnya dalam
satuan kilogram (kg) diconvert kedalam kwintal (kw) dengan aturan
pembulatan sebagai berikut:
|
KG |
KW |
Pembulatan (KW) |
100 |
1 |
1 |
140 |
1.4 |
1 |
150 |
1.5 |
2 |
160 |
1.6 |
2 |
220 |
2.1 |
2 |
250 |
2.5 |
3 |
330 |
3.3 |
3 |
340 |
3.4 |
3 |
350 |
3.5 |
4 |
370 |
3.7 |
4 | -
Berat dengan nilai desimal x,1 - x,4 akan dibulatkan kebawah. -
Berat dengan nilai desimal x,5 - x,9 akan dibulatkan keatas.
Awalnya saya menggunakan fungsi Round(), namun ada komplain dari
user karena hasil pembulatan dinilai salah. Hmm.. setelah
memperhatikan kembali pembulatan yang dilakukan Round(), saya baru
menyadari bahwa ternyata fungsi Round() memiliki perilaku yang tidak
sesuai dengan harapan: 
Perhatikan gambar diatas. 0,5 seharusnya dibulatkan menjadi 1. 2,5
seharusnya dibulatkan menjadi 3, bukan malah menjadi 2. Begitu pula
dengan 4,5 dan seterusnya.
Penyelesaian
Hmm.. karena baik INT maupun CINT memberikan hasil yang sama dengan
Round, Saya menggunakan fungsi berikut sebagai pengganti fungsi
Round()
Public Function SpyRound(Number As Double, _ Optional
NumDigitsAfterDecimal As Integer = 0) As Double
SpyRound = Fix(Number * (10 ^ NumDigitsAfterDecimal) + _
(0.5 * Sgn(Number))) / (10 ^ NumDigitsAfterDecimal)
End Function
Perbandinagn output fungsi Round() dan SpyRound() bisa anda lihat
pada gambar di bawah ini:
Berikut adalah source code perbandingan fungsi Round() dan SpyRound()
pada artikel ini:
Penutup
Kesalahan kecil, namun bisa berakibat sangat fatal ketika kita
berada di lingkungan industri >'_'<
Semoga bermanfaat :)
E.O.F |