PDA

View Full Version : گرد کردن اعداد رو به بالا بدون دانستن تعداد ارقام



bftarane
پنج شنبه 25 اردیبهشت 1393, 01:56 صبح
با چه دستوری میشه اعداد رو به رقم بالاتر از خودشون گرد کرد؟
مثال:
38250-------------39000
125300..................126000
یعنی فقط با یک دستور باشه نه جداگانه؟ آیا امکانپذیره؟
منظورم اینه که تعداد ارقام برای ما مشخص نباشه
فرضاً اگه داشته باشیم 320 هم تبدیل بشه به 400
همه سه مثال بالا با یک دستور. میشه آیا؟

hossein_h62
پنج شنبه 25 اردیبهشت 1393, 21:42 عصر
سلام
با توجه به مثالتون میشه کد زیر رو استفاده کرد؛ خودتون کد رو بهینه و کامل کنید.
declare @a as int
set @a = 125300
declare @b as int
set @b = len(cast(@a as int))
select case when @b>3
then round(@a,-3)+1000
else round(@a,-2)+100
end

bftarane
جمعه 26 اردیبهشت 1393, 12:10 عصر
من برای تعرفه های یک سایت آگهی این سوال رو پرسیدم که دو تا جدول داشتم
به صورت های زیر

119098

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

SELECT PriceWithDiscount FROM (SELECT tbl_Tariff.ID as TID, tbl_Discount.ID as DID,tbl_Discount.ExpireTimeValue * tbl_Tariff.Price - tbl_Discount.Discount * (tbl_Discount.ExpireTimeValue * tbl_Tariff.Price) / 100 AS PriceWithDiscount FROM tbl_Tariff, tbl_Discount ORDER BY tbl_Tariff.Star DESC, tbl_Discount.ExpireTimeValue) WHERE DID = @DiscountID AND TID = @TariffID

ولی کارفرما همچین جدولی داده، که همه قیمتهایی که من به طور اتوماتیک به دست می آوردم رو رو به بالا رُند کرده یعنی مثلاً 43200 رو تبدیل کرده به 44000

نظر شما در این مورد چیه؟ جدول جدید رو بهتره به چه شکل طراحی کنم؟ (راستی دیتابیس من اکسس هست و نمی تونم از SP استفاده کنم و دستوراتی که شما گفتید رو در Sql امتحان کردم ولی با اکسس کارم سخت تر هم میشه فکر کنم، چون باید این دستورات رو در خود برنامه (asp.net) به صورت اینلاین بنویسم.


نوعآگهی ویژه
یک ماه
دو ماه
10 % تخفیف
سه ماه
15 % تخفیف
شش ماه
20 % تخفیف
یک سال
30 % تخفیف


بدون ستاره
5.000
9.000
13.000
24.000
42.000


یک ستاره
7.000
13.000
18.000
34.000
59.000


دو ستاره
8.000
15.000
21.000
39.000
68.000


سه ستاره
9.000
17.000
23.000
44.000
76.000


چهار ستاره
10.000
18.000
26.000
48.000
84.000


پنج ستاره
12.000
22.000
31.000
58.000
101.000


شش ستاره
14.000
26.000
36.000
68.000
118.000


هفت ستاره
15.000
27.000
39.000
72.000
126.000

ASKaffash
شنبه 27 اردیبهشت 1393, 07:32 صبح
سلام
ببین این فرمول درسته ؟
Declare @Num Bigint=38250,@Scale Tinyint=3
Select Convert(Bigint,Round(@Num/Power(10.0,@Scale)+0.5,0)*Power(10,@Scale))
-------------------------
Declare @Num Bigint=125300,@Scale Tinyint=3
Select Convert(Bigint,Round(@Num/Power(10.0,@Scale)+0.5,0)*Power(10,@Scale))

bftarane
شنبه 27 اردیبهشت 1393, 18:42 عصر
سلام
ببین این فرمول درسته ؟
Declare @Num Bigint=38250,@Scale Tinyint=3
SelectConvert(Bigint,Round(@Num/Power(10.0,@Scale)+0.5,0)*Power(10,@Scale))
-------------------------
Declare @Num Bigint=125300,@Scale Tinyint=3
SelectConvert(Bigint,Round(@Num/Power(10.0,@Scale)+0.5,0)*Power(10,@Scale
الآن جوابتون رو دیدم. راستش دیروز جدولم رو عوض کردم ساختارش رو تا بیشتر خود ادمین محاسبه کنه و فقط درج کنه در جدول.
ولی کدهای بالا رو هم تست می کنم در صورتی که جواب داد می یام می گم.