Jumat, 24 September 2010

Fungsi Pengganti Kelemahan Round() Pada Visual Basic

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:

Aturan pembulatan yang diinginkan client

Aturan pembulatan yang diinginkan client

  • 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:

Hasil pembulatan dengan round()

Hasil pembulatan dengan round()

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()

1Public Function SpyRound(Number As Double, _
2Optional NumDigitsAfterDecimal As Integer = 0) As Double
3SpyRound = Fix(Number * (10 ^ NumDigitsAfterDecimal) + _
4(0.5 * Sgn(Number))) / (10 ^ NumDigitsAfterDecimal)
5End Function

Perbandingan output fungsi Round() dan SpyRound() bisa anda lihat pada gambar di bawah ini:

Perbandingan round() dan spyround()

Perbandingan round() dan spyround()

Berikut adalah source code perbandingan fungsi Round() dan SpyRound() pada artikel ini:

Download
Penutup

Kesalahan kecil, namun bisa berakibat sangat fatal ketika kita berada di lingkungan industri >’_'<

Semoga bermanfaat :)

Sumber : http://www.spyrozone.net/hacking/2010/07/fungsi-pengganti-kelemahan-round-pada-visual-basic.jsp

0 komentar:

Posting Komentar

SOTW © 2008 Template by:
SkinCorner