PDA

View Full Version : حرفه ای: ارور در تبدیل متغییر



elham.saedi2014
سه شنبه 26 دی 1396, 19:18 عصر
سلام

قطعه کد ریز رو نوشتم :

DataGridView1.CurrentRow.Cells(7).Value = DataGridView1.CurrentRow.Cells(3).Value.ToString - DataGridView1.CurrentRow.Cells(6).Value.ToString * DataGridView1.CurrentRow.Cells(5).Value.ToString

ولی ارور زیر رو میده :



An exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll but was not handled in user code
Additional information: Conversion from string "۳۲۴۲" to type 'Double' is not valid.

ممنون میشم بررسی کنید

باتشکر

hamidrezax1
سه شنبه 26 دی 1396, 22:16 عصر
سلام دوست عزیز
چند متغیر از نوع دابل تعریف کن ویه گرید نسبت بده
موفق باشید

elham.saedi2014
چهارشنبه 27 دی 1396, 07:25 صبح
سلام

من کد پایین رو نوشتم اما بازم همون ارور قبل رو میده :

Dim a1, a2, a3, a4, a5, a6, a7 As Double

a3 = DataGridView1.CurrentRow.Cells(3).Value


a5 = DataGridView1.CurrentRow.Cells(5).Value


a6 = DataGridView1.CurrentRow.Cells(6).Value


a7 = DataGridView1.CurrentRow.Cells(7).Value


a7 = a3 - a6 * a5

hamidrezax1
چهارشنبه 27 دی 1396, 16:22 عصر
سلام دوست عزیز

Dim a1, a2, a3, a4, a5 As Double


a1 = DataGridView1.CurrentRow.Cells(0).Value




a2 = DataGridView1.CurrentRow.Cells(1).Value




a3 = DataGridView1.CurrentRow.Cells(2).Value


a4 = a2 - a1
a5 = a4 * a3

elham.saedi2014
چهارشنبه 27 دی 1396, 19:45 عصر
مشکل همچنان هست ، ضمن این کد شما تفاوت زیادی با کد من نداره

hamidrezax1
چهارشنبه 27 دی 1396, 21:47 عصر
دوست عزیز کد بالا با کد شما یکم زیاد فرق میکنه.اگر ارور میبینید قطعا توی سلول های دیتاگریدتون به جای عدد نوشته و یا ... هست.شما اعدادتون ارسال کنید دوستان شاید نظر بهتری داشته باشن.موفق باشید

Vahid2017
چهارشنبه 27 دی 1396, 22:04 عصر
سلام

قطعه کد ریز رو نوشتم :

DataGridView1.CurrentRow.Cells(7).Value = DataGridView1.CurrentRow.Cells(3).Value.ToString - DataGridView1.CurrentRow.Cells(6).Value.ToString * DataGridView1.CurrentRow.Cells(5).Value.ToString

ولی ارور زیر رو میده :



An exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll but was not handled in user code
Additional information: Conversion from string "۳۲۴۲" to type 'Double' is not valid.

ممنون میشم بررسی کنید

باتشکر

همونطور که در متن خطا ذکر شده خطا مربوط به casting نامعتبر هست . اونچه که من در متن خطای شما میبینم شما یک عدد با کاراکترهای عربی رو به double ، دارید cast میکنید . ایتدا عدد رو انگلیش کنید. دوم اینکه شما دارید عملگرهایی مثل * یا - رو استفاده میکنید . بنابراین دیلیل برای تبدیل به String وجود نداره اگه قرار باشه تبدیلی قبل از محاسبه انجام بشه تبدیل string به int و سایر انواع numeric با استفاده از متدهای مربوطه مثل int.parse و غیره باید باشه ..

elham.saedi2014
پنج شنبه 28 دی 1396, 14:27 عصر
سلام

نه با تغییر زبان هم درست نمیشه tostring رو هم برداشتم فایده ای نداره ، آخه من بیشتر از صد جای دیگه توی برنامه از همین روال استفاده کردم و هیچ مشکلی نداره .

hamidrezax1
پنج شنبه 28 دی 1396, 18:51 عصر
سلام به احتمال زیاد مشکل در داده های شما هست.در صورت امکان داده هاتون رو ارسال کنید تا اشکال کار مشخص بشه لازم به ذکر که کد مربوطه درست کار میکنه مگر داده ها دارای اشکال باشن.پیشنهاد میکنم اعدادتون رو دقت داشته باشین که با اسپیس نباشن یعنی با ریپلایس اسپیس ها رو حذف کنید.البته اینجوری دوباره باید متغیرتون رو از نوع استرینگ بگیرین
موفق باشید
147481



Dim a1, a2, a3, a4, a5 As String
a1 = DataGridView1.CurrentRow.Cells(0).Value
a1 = a1.Replace(" ", "")
a2 = DataGridView1.CurrentRow.Cells(1).Value
a2 = a2.Replace(" ", "")
a3 = DataGridView1.CurrentRow.Cells(2).Value
a3 = a3.Replace(" ", "")
a4 = a2 - a1
a5 = a4 * a3
MsgBox(a5)