Client menginginkan agar nilai pada timbangan yang awalnya dalam satuan kilogram (kg) diconvert kedalam kwintal (kw) dengan aturan pembulatan sebagai berikut:
- 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()
1 | Public Function SpyRound(Number As Double , _ |
2 | Optional NumDigitsAfterDecimal As Integer = 0) As Double |
3 | SpyRound = Fix(Number * (10 ^ NumDigitsAfterDecimal) + _ |
4 | (0.5 * Sgn(Number))) / (10 ^ NumDigitsAfterDecimal) |
5 | End Function |
Perbandingan 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
Sumber : http://www.spyrozone.net/hacking/2010/07/fungsi-pengganti-kelemahan-round-pada-visual-basic.jsp
0 komentar:
Posting Komentar