PDA

View Full Version : مبتدی: تبدیل ضمنی نوع در VB6



karbara121
دوشنبه 28 شهریور 1390, 01:32 صبح
با سلام دوباره به دوستان عزیز
یه سوالی داشتم
اگه یه عدد اعشاری single بخواد تو متغیر Long ذخیره شه آیا تبدیل به صورت گرد کردن اتفاق می افته؟

Dim sngTaxRate As Single
Dim userValue As Long
userValue = txtParcelValue.Text
Dim taxAmount As Long
taxAmount = userValue * sngTaxRate + 8.55 + 11

lblTaxAmount.Caption = taxAmount

کد بالا بره سه حالتی که جواب 22.3 یا 21.85 یا 21.55 هست عدد 22 رو چاپ میکنه؟

یه سوال دیگه هم ازتون داشتم آیا در vb هر متغیری مقدار پیش فرض داره؟
مثلا در همان کد بالا وقتی جوری برنامه رو run میکنم که در Case statement به sngTaxRate مقدار داده نمی شه برنامه با error مواجه نمیشه و عددی که چاپ میشه نشون میده مقدار 0 گرفته؟

اگه کاربر در txtParcelValue به جای 100 مثلا بنویسه $100 برنامه خوب و درست اجرا میشه
من فکر کردم خودش هنگام تبدیل string به single کاراکترهای عددی رو از کاراکتر های حرفی جدا میکنه ولی مثلا چرا با "100$"مشکل داره؟

محسن واژدی
دوشنبه 28 شهریور 1390, 02:23 صبح
اگه یه عدد اعشاری single بخواد تو متغیر Long ذخیره شه آیا تبدیل به صورت گرد کردن اتفاق می افته؟

سلام علیکم
بله، تبدیل به صورت گرد کردن انجام میشه



یه سوال دیگه هم ازتون داشتم آیا در vb هر متغیری مقدار پیش فرض داره؟

بله، متغیرهای عددی مقدار 0 و رشته ای بدون مقدار و Empty مقدار دهی میشوند



اگه کاربر در txtParcelValue به جای 100 مثلا بنویسه $100 برنامه خوب و درست اجرا میشه
من فکر کردم خودش هنگام تبدیل string به single کاراکترهای عددی رو از کاراکتر های حرفی جدا میکنه ولی مثلا چرا با "100$"مشکل داره؟

اینطور ندیده ام، چون اگر غیر از کاراکترهای عددی کاراکتر دیگری مانند $ باشد برنامه خطا میدهد

setroyd
دوشنبه 28 شهریور 1390, 02:47 صبح
long گرد نمیکنه بله در واقع دلیل گرد کردنش اینه که بتونی به شکلی عدد رو در بیاره که در محدوده ی ساپورت کردنش بشه من سوال 2 رو نفهمیدم بهتر توضیح بده

محسن واژدی
دوشنبه 28 شهریور 1390, 03:14 صبح
long گرد نمیکنه

چرا گرد میکند، به عنوان مثال برای عدد 0.50 یا کمتر از این مقدار 0 و برای 0.51 و بالاتر از آن را 1 ذخیره میکند، همانطور که میدانیم Long اعداد اعشاری را نگهداری نمیکند

karbara121
دوشنبه 28 شهریور 1390, 11:19 صبح
اینطور ندیده ام، چون اگر غیر از کاراکترهای عددی کاراکتر دیگری مانند $ باشد برنامه خطا میدهد



ولی من فکر میکنم $ یک کاراکتر خاص باشه چون وقتی برنامه رو طوری می نویسیکه به ازای ورود کاراکترهای حرفی command مورد نظر رو غیر غیر فعال کنه این command بره 100$ غیر فعال نمی شه ولی بره a100 یا 100@ غیر فعال می شه

محسن واژدی
دوشنبه 28 شهریور 1390, 15:17 عصر
ولی من فکر میکنم $ یک کاراکتر خاص باشه چون وقتی برنامه رو طوری می نویسیکه به ازای ورود کاراکترهای حرفی command مورد نظر رو غیر غیر فعال کنه این command بره 100$ غیر فعال نمی شه ولی بره a100 یا 100@ غیر فعال می شه

سلام
در هرصورت که تست میکنم خطای زمان اجرا میدهد، شاید بنده متوجه منظورتان نمیشوم، در صورت امکان سورس این موضوع را ضمیمه کنید

موفق باشید

karbara121
دوشنبه 28 شهریور 1390, 21:37 عصر
7551475514
سلام
در هرصورت که تست میکنم خطای زمان اجرا میدهد، شاید بنده متوجه منظورتان نمیشوم، در صورت امکان سورس این موضوع را ضمیمه کنید

موفق باشید
من الان VBA کار می کنم و این فایل ها به صورت جدا نیستند بلکه در پروزه ی ArcGIS ذخیره می شن
البته من فایل ها رو export کردم پسوند های cls , frm , frx دارن خودم هم VB6 رو جدا رو کامپیوترم ندارم و از همان editor مربوط به ArcGIS استفاده می کنم
وقتی با VS باز میکنی به یه چیزاییش گیر syntax میده (که البته باید هم بده)من می تونم source ها رو به صورت txt ضمیمه کنم و یه عکس هم از فرم بذارم
توضیح اینکه فایل ThisDocument مربوط به یه نوار ابزاره که رو نقشه به وجود آوردم و Calculate tax یکی از command این نواره که با کلیک رو اون فرم باز می شه و frmTax کدهای مربوط به خود فرمه

از راهنمایی های ارزنده تون هم خیلی خیلی متشکرم

karbara121
دوشنبه 28 شهریور 1390, 23:59 عصر
long گرد نمیکنه بله در واقع دلیل گرد کردنش اینه که بتونی به شکلی عدد رو در بیاره که در محدوده ی ساپورت کردنش بشه من سوال 2 رو نفهمیدم بهتر توضیح بده
منظورم این بود که مثلا در #C ما مجبوریم قبل از استفاده ی هر متغیری بهش مقدار اولیه بدیم وگرنه با ERROR مواجه می شیم یا در ++C با error مواجه نمی شیم ولی متغیر ها ممکن است حاوی مقادیر بی معنی باشند (بسته به قسمتی از حافظه که متغیر اشکال کرده)که منجر به تولید نتایج غلط بشه
ولی تو VB مثل اینکه اینطور نیست و متغیر موقع اعلان یه مقدار اولیه ی DEFAULT می گیره که این اصلا به محلی از حافظه که متغیر اشغال کرده ربط نداره بلکه مثلا بره متغی های عددی همیشه این مفدار پیش فرض 0 است.
می خوام ببینم این نتیجه گیری درسته؟

محسن واژدی
سه شنبه 29 شهریور 1390, 10:19 صبح
من الان VBA کار می کنم و این فایل ها به صورت جدا نیستند بلکه در پروزه ی ArcGIS ذخیره می شن
البته من فایل ها رو export کردم پسوند های cls , frm , frx دارن خودم هم VB6 رو جدا رو کامپیوترم ندارم و از همان editor مربوط به ArcGIS استفاده می کنم
وقتی با VS باز میکنی به یه چیزاییش گیر syntax میده (که البته باید هم بده)من می تونم source ها رو به صورت txt ضمیمه کنم و یه عکس هم از فرم بذارم
توضیح اینکه فایل ThisDocument مربوط به یه نوار ابزاره که رو نقشه به وجود آوردم و Calculate tax یکی از command این نواره که با کلیک رو اون فرم باز می شه و frmTax کدهای مربوط به خود فرمه

از راهنمایی های ارزنده تون هم خیلی خیلی متشکرم


سلام
این صورت یعنی 100$ در وی بی با خطا مواجه میشود (ممکن است در ArcGIS اینطور نباشد)، و اگه اونو در textbox بنویسیم با $ همانند سایر کاراکتر ها رفتار میشود یعنی همچنان command غیرفعال است و حتی در صورت استفاده از آن برای متغیر های عددی با خطای زمان اجرا مواجه میشود

سورس زیر که مشابه فرم frmTax را بررسی کنید، بیشتر متوجه منظور بنده میشوید



...
ولی تو VB مثل اینکه اینطور نیست و متغیر موقع اعلان یه مقدار اولیه ی DEFAULT می گیره که این اصلا به محلی از حافظه که متغیر اشغال کرده ربط نداره بلکه مثلا بره متغی های عددی همیشه این مفدار پیش فرض 0 است.
می خوام ببینم این نتیجه گیری درسته؟

بله، به همین صورت است که فرمودین

موفق باشید