PDA

View Full Version : سوال: ذخیره و بازیابی اعداد اعشاری



mafazel
دوشنبه 06 آبان 1387, 12:14 عصر
با سلام
من این سوال رو یه بار پرسیدم ولی کسی جواب نداد. اگه ممکنه راهنمایی کنید. ممنون
من یه مشکل ساده ولی عجیب دارم
من از نسخه دسکتاپ SQL Server 2000 استفاده می کنم.
یک فیلد از نوع اعشاری تعریف کردم اما مثلا وقتی عدد 20.2 را در جدول وارد می کنم، در هنگام خواندن آن با یک Query عدد 20.199999998 را به من می دهد. (هم Real و هم Float) را امتحان کردم.
مشکل چیست؟
بازم ممنون

Alireza Orumand
دوشنبه 06 آبان 1387, 15:40 عصر
سلام
ببین دوست عزیزم داده های اعشاری به دو دسته تقسیم میشن 1 با دقت معمولی و 2 با دقت مضاعف
اعداد با دقت معمولی که float , real هم جز همین دسته هستن دقیقا همین مشکلی که شما گفتید دارن حتی در Books on line از این دو نوع با عنوان Approximate Numerics یاد شده یا همون اعداد تقریبی و
در جایی به کار میرن که دقت مهم نیست و با یه الگوریتم ساده میشه اعداد رو گرد کرد اما اگه دقت برای شما خیلی خیلی مهم هست از نوع decimal استفاده کنید.
موفق باشید.

ASKaffash
دوشنبه 06 آبان 1387, 17:57 عصر
سلام
مثال شما را تست کردم و 2000 اینکار را انجام نمیدهد با یک Insert به شکل ذیل :
Insert into T3 (A1,A2,A3) Values(3004,'Test',20.2)
بعد با Select دریافت کردم عدد 20.2 را نشان میدهد.
بنظرم مشکل جای دیگری است با چه روشی داده را ارسال میکنید ؟

mafazel
چهارشنبه 08 آبان 1387, 08:38 صبح
با تشکر از پاسختون
نوع Decimal رو امتحان کردم Scale=3 (تعداد ارقام اعشاری) مشکل تقریبا حل شد. عدد 20.2 را 20.200 نشان می دهد.
فرموده بودید گرد کنم. منکه نمیدونم عدد با چند رقم اعشار وارد شده که گرد کنم
تعجبم اینجاست که اولا آیا فقط من به این مشکل برخورد کردم ثانیا اگر بقول شما Real و Float مشکل دارن پس فلسفه وجودی اونا چیه
بهر حال از راهنمایی تون ممنونم
دوست دوم که فرمودید از چه روشی استفاده کردید من از دلفی و ADOCommand و Store Procedure استفاده می کردم شک کردم شاید اینا یا قلقی دارند. این بود که با خود SQL Server manager از گزینه Return All Rows اعداد رو وارد کردم بعد با Query Analyzer یه Query ساده نوشتم اما اشتباه میده.
از لطف و توجه شما هم ممنون

Alireza Orumand
چهارشنبه 08 آبان 1387, 15:04 عصر
سلام
ببینید فلسفه وجودی این موارد معلومه. برای اعدادی که دقت اعشاری پایین دارند. اما اتفاقی که برای شما افتاده اتفاق نادری محسوب میشه و معمولا اینقدر قاتی نمیکنه اما به 10000000 دلیل اعم از نرم افزاری و سخت افزاری ممکنه اتفاقی که برای شما افتاده رخ بده.

منکه نمیدونم عدد با چند رقم اعشار وارد شده که گرد کنم
خوب شما تعداد اعشار خاصی را برای خود در نظر گرفته اید؟
در ضمن در زبان های برنامه نویسی معمولا توابعی برای این کار ها وجود دارد. مثلا در C# کلاس Math برای گرد کردن اعداد تابع داره.
موفق باشید.