ايران ويج

نسخه‌ی کامل: یه مشکل عجیب تو حلقه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام.
من یه حلقه do while ساده درست می کنم.

کد:
Private Sub Command1_Click()
Do While i < 100
Text1.Text = i
Me.Refresh
i = i + 0.1
Loop
End Sub

در کمال تعجب میبینم که i یه عددی شده که نباید بشه مثل 7.136655666
!!!!!!
دوست من سلام

من اين برنامه رو چك كردم ! مقدار نهايي توي تكست باكس ميشه 99.9999999999986 و مقدار نهايي متغير i ميشه 100.099999999999 . من اون چيزي كه شما گفتي نديدم !! 8O
چه جوابي از كامپايلر انتظاز داري مگه :?: :!:
بنظر شما وقتی به عدد i که صفر هست پشت سر هم 0.1 اضافه کنیم باید همچین عددی بدست بیاد !؟!
باید بشه 0.1 و 0.2 و 0.3 و ... و 4.2 و ... و 5.9و ...
نه عددی مثل 99.9999999999986
خوب عزيز دل من شما متغيرت رو درست تعريف كردي ؟؟ نكردي ؟
شما كه به دقت اعشاري نياز داري اين كد رو اضافه كن بالاي كدت تا اونوقت اون چيزي كه ميخواي بشه :

کد:
Dim i As Currency

:wink:
سلام
كدت رو درست كردم ببين همينو ميخواي

کد:
Private Sub Command1_Click()
Do While i < 100
Text1.Text = i
Me.Refresh
i = Val(i) + Val(0.1)
Loop
End Sub
کد:
Private Sub Command1_Click()
Do While i < 100
Text1.Text = i
Me.Refresh
i =round(( i + 0.1)*10 )/10
Loop
End Sub

اینم یه راه.
خیلی ممنون درست شد. حالا کسی میدونه چرا کد اول اشتباه میکرد؟ (متغیر هم از نوع Double تعریف کرده بودم). آقایون arashrj و Nerzhul_Arthas شما هم یه توضیح درمورده اینی که گفتین بدین
کد:
i =round(( i + 0.1)*10 )/10

این خط میاد به طور مثال i که هست 5.9 رو به 5.999999999999 تبدیل میکنه در حالی که نباید بکنه پس ضرب در 10 میکنه که میشه 59.99999999999 بعد رند میکنه. یعنی میکنه 60 بعد تقسیم بر 10 میکنه میشه 6
سلام

من در كدم گفتم كه متغيير من از نوع Double هست تا اون ها رو باهم جمع كنه نه اين كه كنار هم بزاره
اگه دقت كرده باشي در ماشين حساب هم براي جمع و تفريق از متغيير Double استفاده ميكنن

اين رو يه تست كن
کد:
Text3.Text = Text1.Text + Text2.Text
درسته در اين كد مقدارهاي Text1 و Text2 رو در كنار هم قرار ميده
حالا اين كد رو ببين
کد:
Text3.Text = Val(Text1.Text) + Val(Text2.Text)
مي خواستي كامپيوتر با اون سرعتي كه داره آروم آروم واست بشماره؟
به جاي loop از يه تايمر استفاده كن