[HOME]

 

WWW.SPYROZONE.NET

 

 

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

Download spyRound() Example

 

Penutup

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

 

Semoga bermanfaat :)

E.O.F

 

  [HOME]  

 WWW.SPYROZONE.NET