PDA

View Full Version : سوال: لطفا کمک کنید، نتیجه محاسبات غیر منطقی میشه ؟؟!!



mohammad_2039
یک شنبه 19 اردیبهشت 1389, 09:45 صبح
با سلام به دوستان گرامی.
من میخوام یکی از فیلدهای جدول رو بخونم و به ترتیب از بالا به پایین در یه عدد ضرب کنم و نتیجه رو در یه تیبل دیگه نمایش بدم. این کار رو با کد زیر انجام میدم.




SqlCommand cmd = new SqlCommand("select * from tbl_table", sqlConnection1);
sqlConnection1.Open();
SqlDataReader reader = cmd.ExecuteReader();
int FieldCount = reader.FieldCount;
object[] Values = new object[FieldCount];
while (reader.Read())
{
reader.GetValues(Values);


int mablag = reader.GetInt32(0);
for (int n = 2; n != FieldCount; n++)
{

double kol = (mablag * 700);

//statments for insert into DataBase
}
}
reader.Close();
sqlConnection1.Close();



مشکل اینجاست که وقتی اعداد کوچک و در حد میلیون باشه خیلی خوب جواب میده و مشکلی نداره:لبخند: اما وقتی اعداد به چند صد میلیون و میلیارد میرسه نتایج بدست اومده بسیار عجیب و غریبه:متعجب::متفکر: با اینکه دو عدد مثبت در هم ضرب میشن اما نتایج اعداد بزرگ، نا مرتبط و منفی درمیاد:عصبانی:هر چقدر هم نوع های داده رو تغییر میدم نتیجه نمی گیرم. این خط از کد:



int mablag = reader.GetInt32(0);


فقط همین حالت رو قبول میکنه و در بقیه نوع های داده که استفاده میکنم خطای invalid cast میده. نوع داده در جدول bigint هست. خواهش میکنم کمکم کنید. متشکرم

Shahram_Shobeiri
یک شنبه 19 اردیبهشت 1389, 10:05 صبح
به نظر من راه منطقی تر اینه که از کوئری زیر استفاده کنی و عملیات ضرب رو در db انجام بدی. امتحان کن شاید درست بشه


SELECT a * 700 FROM tbl_tab

mohammad_2039
یک شنبه 19 اردیبهشت 1389, 10:18 صبح
من چون میخواستم کد طولانی نشه 700 رو گذاشتم، تو برنامه عدد رو از ورودی و طی فرایند دیگه ای دریافت میکنه:خجالت:.

mohammad meta
یک شنبه 19 اردیبهشت 1389, 11:30 صبح
سلام
دوست عزیز دلیل اینکه عدد منفی می شه اینه که از محدوده integer بالا میزنه.دلیلشم اینه که روی sign bit عدد اون مقدار اضافه نوشته میشه و اون bit را یک می کنه یک شدن sign bit نشان دهنده عدد منفی است.شما اگر int را به double تبدیل کنید مشکلتون حل می شه.

exlord
یک شنبه 19 اردیبهشت 1389, 12:35 عصر
شما مقادیر داده هات از int32 میزنه بالاتر برا همین .....
از UInt64 استفاده کن