PDA

View Full Version : مشکل در استفاده از FLOAT



ama55555
سه شنبه 04 مهر 1385, 09:40 صبح
با سلام

من از نوع Float برای مقادیر اعشاری استفاده می کنم . وقتی در جداول دیتابیس بطور دستی مقدار را وارد می کنم مثلا 4.8 . هنگامی که این جدول را در QueryAnalyzer باز می کنم بجای مقدار 4.8 -- 4.8000000000000007 را نمایش می دهد
برای رفع این مشکل باید چه کار کنم ؟

h_baqery
سه شنبه 04 مهر 1385, 14:51 عصر
این طبیعت float است یعنی ممیز شناور .
می توانی در زمان نمایش به نوع Decimal تبدیل کنی تا مشکلی نداشته باشی . با استفاده از دستور cast تعداد ارقام بعد از ممیز رو هم میتونی تعیین کنی .


SELECT Cast(floatFiled as decimal(18,3))
from tableName

ama55555
سه شنبه 04 مهر 1385, 15:01 عصر
مشکل من این است که وقتی مقدار را (مثلا 4.8) وارد می کنم چرا غیر از این ثبت و نمایش می دهد. مشکل من در ورود اطلاعات می باشد نه نمایش آن
!

h_baqery
سه شنبه 04 مهر 1385, 15:05 عصر
نوع فیلدتون رو decimal کنید چون طبیعت float این است . برای ممیز ثابت مجبور به استفاده از Decimal هستید .

ama55555
سه شنبه 04 مهر 1385, 15:44 عصر
من این مورد را در یک جدول دیگر امتحان کردم مشکلی ندارد

h_baqery
چهارشنبه 05 مهر 1385, 08:22 صبح
نمی دونم چرا بعضی جاها اینجوری نشون می ده و بعضی جاهای دیگه اینجوری نیست ولی حتما یه جایی یه گزینه ای رو باید ست کرد تا درست بشه . ولی در تجربه مشابهی که من داشتم در نمایش محیط query درست شد ولی در گزارشاتم به همون شکل موند و ساده ترین راهو در این دیدم که نوع فیلدها مو عوض کنم تا تمام گزارشاتی که از اون فیلدها استفاده می کرد .

AminSobati
جمعه 07 مهر 1385, 14:10 عصر
جنس Float به CPU وابستگی داره و به همین دلیل مثلا توابعی که داخلش محاسباتی با Float انجام میده، بعضی خصوصیات رو از دست میده چون روی سیستمهای مختلف میتونه اختلاف جزئی داشته باشه

ama55555
شنبه 08 مهر 1385, 08:27 صبح
پس یعنی برای ذخیره دقیق اطلاعات از این نوع داده نباید استفاده کرد ؟

یعنی تنها راهش این است که من تمام فیلدهای Float را تبدیل به Decimal کنم ؟

AminSobati
شنبه 08 مهر 1385, 21:49 عصر
عزیزم من با این نوع داده ها زیاد سروکار نداشتم. ولی در Books Online کاملا همه چیز رو توضیح داده

odiseh
دوشنبه 10 مهر 1385, 09:46 صبح
سلام
همانطور که دوستان در بالا اشاره کردند Float یک مقدار رو به صورت تقریبی نشان می ده و ذخیره میکنه ولی برای درج یک مقدار اعشاری که به صورت دقیق (نه تقریبی) باید از Decimal استفاده کنید.