(Sumber: milist DOTNET) Hitung Pembagian
-
26 April 2012 9:18Moderator
Selamat Siang Rekan2 sekalian..
Saya mohon bantuannya Rekan2 sekali mengenai masalah yang saya dapat di Visual Studio 2008 desktop application. Disana saya membuat beberapa variabel double, lalu saya bagi variabel tersebut dengan 1.1 kok hasilnya beda dengan saya cari di kalkulator. Nilai 26.950 kalau saya bagi 1.1 itu hasilnya bulat 24.500, tapi waktu saya bagi di editor VB hasilnya malah jadi 24.499,99999999996.
Apakah ada yang pernah kejadian seperti ini, mohon infonya kalau ada.
Agnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- Diedit oleh Agnes SannieMicrosoft Contingent Staff, Moderator 26 April 2012 9:23
Semua Balasan
-
26 April 2012 9:28Moderator
operator "/" di VB akan mengembalikan nilai floating point
kalau kamu mau hasilnya integer, pakai operator "\".Detailnya bisa cek disini :
http://msdn.microsoft.com/en-us/library/25bswc76.aspx
http://msdn.microsoft.com/en-us/library/0e16fywh.aspx
Dijawab oleh: Ronald R
Agnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
26 April 2012 9:28Moderator
Selamat Siang Rekan Ronald..
Terima kasih buat responnya.. Saya soalnya ngak bs pakai integer, karena variabel ini juga nantinya kalau saya pakai angka lain pasti ada desimalnya, makanya saya pakai double. Cuma yang buat saya bingung adalah sudah seharusnya visual basic mengeluarkan angka pasti 24.500 sebagai hasil 26.950 / 1.1 apapun tipe datanya baik double ataupun integer karena hasilnya bulat. Saya sudah tes di excel dan calc.exe di windows, hasilnya sama 24.500, kenapa di VB hasilnya 24.499,99999999996. Saya sebenarnya sudah menemukan solusinya dari teman saya, saya bagikan 26.950 dengan 110 lalu kali 100 baru VB keluarkan hasilnya 24.500. Walaupun sudah solve problem saya, saya masih penasaran kenapa VB keluarkan angka seperti itu. Apakah ini BUG dari VB..?? Atau mungkin ada penjelasan Rekan2 yang pernah alami hal yang sama.
Thanks
Agnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
26 April 2012 9:29Moderator
behavior dari type Double itu merupakan by Design ( di java pun terjadi seperti ini )
Pejelasan lengkap bisa di baca jawaban Eric Lippert ( http://stackoverflow.com/questions/4603944/whats-the-benefit-of-accepting-floating-point-inaccuracy-in-c-sharp )
kalau melihat potongan code anda, lebih di sarankan menggunakan type Decimal.
Dijawab oleh: dedeAgnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- Ditandai sebagai Jawaban oleh Agnes SannieMicrosoft Contingent Staff, Moderator 26 April 2012 9:37
-
26 April 2012 9:31Moderator
Untuk pemakaian sehari-hari, terutama untuk perhitungan yang menyangkut finansial, saya lebih menyukai menggunakan
Decimal type daripada double type.
Coba lihat referensi berikut :
http://msdn.microsoft.com/en-us/library/xtba3z33.aspx
Dijawab oleh: Michael SusantoAgnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
26 April 2012 9:32Moderator
hi,
ini bukan BUG, tapi seperti yg diemail saya sebelumnya operasi pembagian dilakukan secara floating point. detailnya bisa cek di : http://en.wikipedia.org/wiki/Floating_point kalau mau liat bagaimana operasinya dilakukan ada simulatornya disini http://www.ecs.umass.edu/ece/koren/arith/simulator/FPMul/
Dijawab oleh: Ronald RAgnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
26 April 2012 9:33Moderator
Tipe data single/double (64-bit) memang tidak akan menghasilkan nilai eksak (0.5).
Silakan baca lagi tentang representasi & aritmetik untuk bilangan floating-point di wikipedia atau buku/kuliah arsitektur komputer
http://en.wikipedia.org/wiki/Floating_point
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Dijawab oleh: peb aryanAgnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
26 April 2012 9:33Moderator
floating point dan decimal itu beda
kalau saya gak salah type data floating point (single or double di VB, float or double di C#) memang begitu.
ada kasus2 "truncation error" yg bisa terjadi bila menggunakan floating point.
1 dibagi 3 saja bisa berbeda hasilnya bila kita menggunakan floating point.
(coba test 1 as double / 3 as double, 1 as single / 3 as single, 1 as decimal / 3 as decimal)
kalau mau jawaban detail coba googling, keywordnya : floating point truncation error.
kalau memang mau mendapatkan hasil yg akurat untuk bilangan pecahan sebaiknya pakai type data decimal saja.
Dijawab oleh: agus syahputraAgnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- Ditandai sebagai Jawaban oleh Agnes SannieMicrosoft Contingent Staff, Moderator 26 April 2012 9:37
-
26 April 2012 9:34Moderator
Ok, terima kasih buat informasi dari Rekan2 sekalian.. Semua info itu membantu saya memahami tentang floating point dan decimal datatype..
Sekali lagi terima kasih..
Agnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
26 April 2012 9:34
salam hangat,
untuk permasalah anda, simple saja..
silahkan anda bulat kan perhitungan anda, contohnya seperti ini:pembulatan ke otomatis,
___________________________________________________________
i = CInt(0.4) , hasilnya 0
i = CInt(0.5) , hasilnya 0
i = CInt(0.6) , hasilnya 1
i = CInt(1.4) , hasilnya 1
i = CInt(1.5) , hasilnya 2
i = CInt(1.6) , hasilnya 2___________________________________________________________
pembulatan yang di tentukan,
____________________________________________________________
Dim Nilai As Double, Hasil As Long
Nilai = 1.4 'bilangan yg akan dibulatkan
Hasil = Int(Nilai) + IIf(CDbl(CStr(Nilai - Int(Nilai))) >= 0.4, 1, 0) 'Batas = 0,4
MsgBox Hasil 'pesan Hasil = 2____________________________________________________________
untuk referensi, silahkan mengacu pada msdn atau literature yang menyediakan informasi tersebut.
http://msdn.microsoft.com/en-us/library/x99xtshc.aspx
regard
- Disarankan sebagai Jawaban oleh r aditya gumay 26 April 2012 9:35
-
26 April 2012 9:34Moderator
Sptnya bukan di .NET saja, tipe data float dan real di SQL Server pun begitu:
http://stackoverflow.com/questions/5815884/wrong-calculation-in-sql-server
Dijawab oleh: Paulus ImanAgnes Sannie [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.