PDA

View Full Version : تابع Round در SQL نسبت به Math.Round در دات نت مقدار متفاوت برمیگردونه



Developer Programmer
جمعه 02 مهر 1389, 11:18 صبح
واسه محاسبه 3% یک عدد اون رو گرد میکنم. در بعضی مواقع SQL مقدار متفاوت از برنامه برمیگردونه

select
100 * round( 11016/100 , 1)
مثلا واسه عدد 25296 :
SQL : 25200
.Net: 25300
برمیگردونه

ولی واسه 11016
هر دو محیط، مقدار 11000 رو برمیگردونن

باید چیکار کنم که هر دو یک مقدار رو برگردونن ؟

بهزادصادقی
جمعه 02 مهر 1389, 13:41 عصر
مشکلی که شما مشاهده می فرمائید ربطی به عملکرد تابع round ندارد. بلکه از ماهیت ورودی آن تابع سرچشمه می گیرد.

برای حل مشکل، به جای تقسیم بر 100، عدد خود را بر 100.0 تقسیم نمایید:



select 100 * round( 25296/100 , 1) -- Returns: 25200

select 100 * round( 25296/100.0 , 1) -- Returns: 25300.0

select 100 * cast( round( 25296/100.0 , 1) as int) -- Returns: 25300


هر وقت در SQL Server از / برای تقسیم استفاده می نمائید و هر دو عدد از نوع int هستند، SQL Server نوع جواب را int لحاظ می کند و قسمت بعد از علامت ممیز را قیچی می کند.