PDA

View Full Version : سوال: مشکل در تبدیل نوع string به double



rezvan.j
سه شنبه 27 مهر 1389, 15:13 عصر
سلام دوستان

یه تیکه برنامه کوچیکه ساده هس ولی جواب نمیده :لبخند:

چطوری یک رشته string رو به دابل تبدیل کنم ؟



string a, b;
string d1;
double c, e1, f, c1;

c = Double.Parse(GridView1.Rows[i].Cells[2].Text.ToString()) + Double.Parse(GridView1.Rows[i].Cells[1].Text.ToString());



:لبخند:

ارور داره که Input string was not correct foramt

توضیح اینکه مقادیر داخل خود دیتابیس که واکشی شده توی گرید از جنس دابل هستن .
بعد اومدیم استرینگ کردیم دوباره دابل :لبخند:

سپااااس :لبخندساده:

hamhik
سه شنبه 27 مهر 1389, 15:53 عصر
این یه نمونه کد ساده برای تبدیل نوع string به نوع double


string s;
s = "23";
string s1;
s1 = "4";
double t;
t = Convert.ToDouble(s)+Convert .ToDouble(s1) ;
Label1.Text = t.ToString();

raravaice
سه شنبه 27 مهر 1389, 15:56 عصر
کاری که شما کردی درسته ولی به طور حتم مقادیر داخل Cell های شما دارای مشکل هست که قابل تبدیل نیست، مقادیر را بررسی کن تا به مشکل پی ببری.

موفق باشی

rezvan.j
چهارشنبه 28 مهر 1389, 22:25 عصر
کاری که شما کردی درسته ولی به طور حتم مقادیر داخل Cell های شما دارای مشکل هست که قابل تبدیل نیست، مقادیر را بررسی کن تا به مشکل پی ببری.

موفق باشی

مرسی

متوجه شدم که نوع فیلدهای داخل بانک یکی int و دیگری char بود و حل شد اون قسمت ولی ادامش هنوز مشکل داره .

حالا فیلدی داخل جدول دارم که از جنس real هست




string d1;
Double e1, f;

d1 = Convert.ToString(ds.Tables["karnameh"].Rows[i].ItemArray.GetValue(3));
e1 = Double.Parse(d1);



و باز هم همون خطای درست نبودن فرمت رشته ورودی .

لطف اینم راهنمایی کنید .:لبخندساده:

BookWorm
چهارشنبه 28 مهر 1389, 22:49 عصر
سلام



d1 = Convert.ToString(ds.Tables["karnameh"].Rows[i][3].Value.ToString());

rezvan.j
پنج شنبه 29 مهر 1389, 17:33 عصر
سلام



d1 = Convert.ToString(ds.Tables["karnameh"].Rows[i][3].Value.ToString());


مرسی دوست عزیز

ولی هنوز همون ارور پابرجاست :ناراحت:

rezvan.j
پنج شنبه 29 مهر 1389, 17:44 عصر
یه بار دیگه از اول بررسی کنم شاید دوستان چیزی ببینن که من نمی بینم :لبخند:

توی جدول فیلدی به نام mark دارم که جنسش real هست

stored procedure دارم به این شکل :



CREATE PROCEDURE SP_Karnameh @groupid int , @id_std bigint , @year_semester nvarchar(25) AS
select mark.idstd ,mark.idempless , mark.group_id , mark.mark , empless.idempless , empless.idless ,
lesson.lesson , lesson.idless, lesson.creditn , lesson.credita , lesson.idmajor , empless.yearsemester , empless.group_id
from mark inner join empless on mark.idempless = empless.idempless
inner join lesson on lesson.idless = empless.idless
where mark.idstd = @id_std and empless.yearsemester=@year_semester and empless.group_id=@groupid
GO



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



<asp:GridView id="GridView1" runat="server" Width="286px" AutoGenerateColumns="False">
<Columns >

<asp:BoundField DataField ="lesson" HeaderText ="نام درس" />
<asp:BoundField DataField ="credita" HeaderText ="واحد عملی" />
<asp:BoundField DataField ="creditn" HeaderText ="واحد تئوری" />
<asp:BoundField DataField ="mark" HeaderText =" نمره" />


</Columns>

</asp:GridView>



متغیر هایی دارم به این شکل :




string d1;
double e1, f;



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


d1 = Convert.ToString(ds.Tables["karnameh"].Rows[i][3].ToString());
e1 = double.Parse(d1);



و آخر همه اینها هم ارور صحیح نبودن فرمت رشته ورودی :لبخند:

rezvan.j
پنج شنبه 29 مهر 1389, 17:47 عصر
و اینکه فرق double با Double چیه ؟

از کدوم باید استفاده کرد ؟

هر چند هر دو رو امتحان کردم برای همه موارد .

Rejnev
پنج شنبه 29 مهر 1389, 19:04 عصر
اولا ميشه بگي كه بعد از اجرا مقدار d1 چيه كه خطا ميده و ثانيا
Double نسخه دات نتي double هست و فرقي نميكنن.



d1 = Convert.ToString(ds.Tables["karnameh"].Rows[i][3].ToString());
e1 = double.Parse(d1);
//write:
e1=double.Parse(ds.Tables["karnameh"].Rows[i][3].ToString())


اگه بعضي از مقادير ستون سوم نول هست قبلش ميتوني چك كني كه نول نباشه و در نهايت هم ميتوني tryParse كني كه به خطا هم بر نخوره:



double e1;
if(double.TryParse(ds.Tables["karnameh"].Rows[i][3].ToString(),out e1))
{
//use e1
}
else
{
//show error message
}

rezvan.j
پنج شنبه 29 مهر 1389, 19:47 عصر
اولا ميشه بگي كه بعد از اجرا مقدار d1 چيه كه خطا ميده و ثانيا
Double نسخه دات نتي double هست و فرقي نميكنن.



d1 = Convert.ToString(ds.Tables["karnameh"].Rows[i][3].ToString());
e1 = double.Parse(d1);
//write:
e1=double.Parse(ds.Tables["karnameh"].Rows[i][3].ToString())

اگه بعضي از مقادير ستون سوم نول هست قبلش ميتوني چك كني كه نول نباشه و در نهايت هم ميتوني tryParse كني كه به خطا هم بر نخوره:



double e1;
if(double.TryParse(ds.Tables["karnameh"].Rows[i][3].ToString(),out e1))
{
//use e1
}
else
{
//show error message
}







همون خالی برمی گردونه :لبخند:

و اینکه مقادیر خالی هم داریم ، یعنی برنامه می تونه موقعی که هنوز اون فیلد پر نشده هم اجرا بشه ! خب باید از اون رکوردی که فیلدش خالیه بگذره ، نباید ؟ ینی این کار و نمی کنه ؟

پس ینی با tryparse نال بودن رو چک کنم که اگه نال نبود مثلا تبدیل به دابل کنه ؟

Rejnev
پنج شنبه 29 مهر 1389, 20:10 عصر
آخرين كاري كه ميكني اين باشه
اول چك كن null نباشه:


double e1;
if(dt.rows[i][3]!=null)
{
if(double.tryparse(dt.rows[i][3].toString(),out e1))
{
//now e1 is double of specified cell-- use it!
}
}


tryparse يك رشته ميگيره و يك آرگومان out كه خروجي تبديل در اون پارامتر دوم ريخته خواهد شد.
اگه نتونه تجزيه كنه مقدار false بر ميگردونه و اگه بتونه ضمن مقدار true در پارامتر دوم(در اينجا e1) حاصل پارس قرار ميگيره

rezvan.j
پنج شنبه 29 مهر 1389, 20:22 عصر
آقا مرسی خیلی لطف کردی

درست شد

:لبخندساده: