masoode
یک شنبه 20 آبان 1397, 16:47 عصر
سلام
من عدد 2 را در متغیری از نوع Real ذخیره کردم. آن را در دیتابیس ذخیره کردم حالا وقتی موقع مقایسه آن عدد ذخیره شده را با عدد 2 مقایسه می کنم برابر نیست!!!!
اگر عدد ذخیره شده در دیتابیس را A فرض کنیم:
If A=2 Then Beep;
اما صدایی در نمی آید علت آن این است که در واقع به جای عدد 2.0000000000 عدد 1.99999999999999 ذخیره شده است!!!
چه کار کنم؟
ظاهرا در زبان C# یک دیتاتایپ وجود دارد به اسم Decimal که اعداد اعشاری را در مبنای 10 ذخیره میکند نه مبنای 2 (IEEE-754) !!
آیا دلفی راه حلی برای این مشکل وجود دارد؟
این هم لینک آن مطلب در C#
http://barnamenevis.org/showthread.php?480344-%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1%DB%8C
البته تابع CompareValue در یونیت Math برای این نوع مقایسه وجود داره اما آیا راهی هست که این عدد در دیتابیس (SQL Server) همان شکلی من می خواهم ذخیره بشه؟
من عدد 2 را در متغیری از نوع Real ذخیره کردم. آن را در دیتابیس ذخیره کردم حالا وقتی موقع مقایسه آن عدد ذخیره شده را با عدد 2 مقایسه می کنم برابر نیست!!!!
اگر عدد ذخیره شده در دیتابیس را A فرض کنیم:
If A=2 Then Beep;
اما صدایی در نمی آید علت آن این است که در واقع به جای عدد 2.0000000000 عدد 1.99999999999999 ذخیره شده است!!!
چه کار کنم؟
ظاهرا در زبان C# یک دیتاتایپ وجود دارد به اسم Decimal که اعداد اعشاری را در مبنای 10 ذخیره میکند نه مبنای 2 (IEEE-754) !!
آیا دلفی راه حلی برای این مشکل وجود دارد؟
این هم لینک آن مطلب در C#
http://barnamenevis.org/showthread.php?480344-%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1%DB%8C
البته تابع CompareValue در یونیت Math برای این نوع مقایسه وجود داره اما آیا راهی هست که این عدد در دیتابیس (SQL Server) همان شکلی من می خواهم ذخیره بشه؟