PDA

View Full Version : نمایش عدد اعشاری



reza6384
سه شنبه 31 شهریور 1388, 19:48 عصر
سلام.

من سوالم رو با یک کد ساده مطرح می کنم :



Dim K As Double = 1.384 - 1.383
MsgBox(K)


خروجی که داده میشه بر خلاف انتظار به جای 0.001 یک چیزی میشه مثلا 0.000999999989
و اگر هم که چند رقم اعشار باشه مثلا می نویسه
9.8899998899E-5
البته فکر کنم دلیلش به خاطر ساختار 32 بیتی یک عدد ممیز شناور باشه ، اما چرا این اتفاق توی Calculator ویندوز نمی افته؟

سوال من اینه که چجوری همون خروجی مورد انتظار رو از جمع و تفریق دو عدد اعشاری به دست بیاریم.

با تشکر

anooshiran
سه شنبه 31 شهریور 1388, 19:54 عصر
سلام دوست عزيز



Dim K As Double = CDec(1.384) - CDec(1.383)
MsgBox(K)

saadi2
سه شنبه 31 شهریور 1388, 22:16 عصر
Dim number AsDouble = 56 / 13
MsgBox(Format$(number, "###.000"))

reza6384
سه شنبه 31 شهریور 1388, 23:23 عصر
Dim K AsDouble = CDec(1.384) - CDec(1.383)
MsgBox(K)



سلام.

با تشکر از پاسخ شما ، ولی این تابع تا 4 رقم اعشار جواب میده و دقت بیشتر رو به صورت نمایش علمی نشون میده ( مثلا همون E-5 4.9 )

anooshiran
سه شنبه 31 شهریور 1388, 23:27 عصر
سلام دوست عزيز

كد زير را تست كنيد. كاملا تا هر ميزان اعشار كه باشد جواب مي دهد.




Dim K As Double = CDbl(1.3845675465465459) - CDbl(1.3833231546546565)
MsgBox(K)

reza6384
سه شنبه 31 شهریور 1388, 23:31 عصر
Dim number AsDouble = 56 / 13
MsgBox(Format$(number, "###.000"))


با جواب شما مشکلم تا حد زیادی حل شد، حالا برای اعدادی که دقتش رو نمی دونیم چقدره چکار کنیم؟ آیا باید اون بخش 000.### رو با برنامه نویسی درست کنیم تا به هر دقتی برسیم؟

reza6384
سه شنبه 31 شهریور 1388, 23:34 عصر
سلام دوست عزيز

كد زير را تست كنيد. كاملا تا هر ميزان اعشار كه باشد جواب مي دهد.




Dim K As Double = CDbl(1.3845675465465459) - CDbl(1.3833231546546565)
MsgBox(K)



آقا دستت درد نکنه ، همین الان که پست زدی به صورت داغ داغ دیدم و مشکلم کاملا حل شد.

حالا یه سوال ، این توابع رو چحوری باید شناخت؟ مثل همین CDbl و غیره که خیلی هستند و وجود دارند و بعضی وقت ها آدم کلی دنبالش می گرده.

anooshiran
چهارشنبه 01 مهر 1388, 00:04 صبح
سلام دوست عزيز

تابع cdbl از سري توابعي است كه براي تغيير بكار ميرود و مخفف change to double است.
توابعي هم خانواده هم دارد مانند csrt , cshort , cint ,cdec و ... كه از help ميتواني بدست بياوري.