PDA

View Full Version : محاسبه تخفیف



M.YasPro
سه شنبه 30 شهریور 1389, 08:12 صبح
سلام
چطور میشه تخفیف یک کالا رو حساب کرد .
فرض کنید productID و تخفیف رو داریم و میخوایم قیمت رو منهای تخفیف کنم و قیمت رو با احتساب تخفیف برگردونم .
ممنون از توجهتون

HH2BN1990
سه شنبه 30 شهریور 1389, 09:08 صبح
UnitPrice * Quantity * ( ( 100-Discount ) / 100 )

البته اگه سوال رو درست فهمیده باشم.

M.YasPro
سه شنبه 30 شهریور 1389, 09:34 صبح
نه متاسفانه منظورم این نبود .
من این طور استورم رو نوشتم :
دو متغیر ورودی دارم
productId , DISCOUNT
با استفاده از productID قیمت محصول هدف رو در میارم
قیمت رو تقسیم بر 100 می کنم تا قیمت 1% در بیاد
Didcount رو ضرب در (قیمت /100) می کنم تا مبلغ تخفیف در بیاد .
و یه قیمت جدید ( جواب عبارت بالا - قیمت اصلی ) رو بر می گردونم .

این حالت درسته و جواب هم میده ، اما اگر یک جنس به قیمت 50 تومان باشه ، اگر تقسیم بر 100 بشه میشه 0 ، نمیشه 0.5
مشکل من فقط توی اعداد پایینه که نمی تونم توی جواب تقسیم اعشاری برگردونم .
اصلا خود Tsql تابعی برای محاسبه درصد نداره ؟

MOJTABAATEFEH
سه شنبه 30 شهریور 1389, 09:36 صبح
سلام
چطور میشه تخفیف یک کالا رو حساب کرد .
فرض کنید productID و تخفیف رو داریم و میخوایم قیمت رو منهای تخفیف کنم و قیمت رو با احتساب تخفیف برگردونم .
ممنون از توجهتون

دوست عزیز می تونید از کد زیر استفاده نمایید البته مقدارها به طور مثال وارد شده و بایستی با توجه نیاز تغییر داده بشن

Quantity تعداد
Discount تخفیف
Unitprice قیمت واحد کالا



declare @fi money
select @fi = unitprice from table1 where productid=1
select ((@fi * Quantity) - discount) as Total from table1


موفق باشید

M.YasPro
سه شنبه 30 شهریور 1389, 09:39 صبح
متغیر discount از چه نوعی هست ؟

MOJTABAATEFEH
سه شنبه 30 شهریور 1389, 11:22 صبح
متغیر discount از چه نوعی هست ؟

شما می گید مقدار Discount رو دارید پس نوعش مشخصه معمولا از نوع پولی هستند


موفق باشید

M.YasPro
سه شنبه 30 شهریور 1389, 12:02 عصر
مقدار discount که قرزاره از نوع int باشه و بیانگر درصد!!

MOJTABAATEFEH
سه شنبه 30 شهریور 1389, 12:52 عصر
مقدار discount که قرزاره از نوع int باشه و بیانگر درصد!!

به صورت زیر تغییر بدین


Quantity تعداد که از ورودی می گیریم



declare @fi money
select @fi = unitprice from table1 where productid=1
select (@fi * Quantity * ((100 - Discount)/100) as Total

M.YasPro
سه شنبه 30 شهریور 1389, 13:33 عصر
دوست عزیز من تو فرمولش مشکلی ندارم .
شما جواب یه سوال منو بدید :
100/3باید بشه 33.333333 ولی میشه 33
این اعشار چه جوری باید نمایش داده بشه

ASKaffash
سه شنبه 30 شهریور 1389, 14:04 عصر
سلام
100.00/3.00 Select میشه خیلی توی cast کردن SQL باهوش نیست

Rezahak
سه شنبه 30 شهریور 1389, 14:08 عصر
عزیزم شما باید از تبدیل نوع و تابع cast استفاده کنی یعنی مثلا اگر 3 رو بخواهی بر 100 تقسیم کنی و به صورت درصد نمایش بدهی باید بنویسی:
cast(3/100) as float * 100

M.YasPro
سه شنبه 30 شهریور 1389, 14:18 عصر
منظورتو متوجه نشدم دوست عزیز
در ضمن با CAST هم آشنام ولی با CAST هم نتونستم 33.3333=100/3 رو بدست بیارم .

Rezahak
سه شنبه 30 شهریور 1389, 14:32 عصر
باید بعد از cast کردن نتیجه تقسیم حاصل را در 100 ضرب کنی تا درصد بدست بیاید دقیقا همانطوری که نوشتم

M.YasPro
سه شنبه 30 شهریور 1389, 15:34 عصر
باید بعد از cast کردن نتیجه تقسیم حاصل را در 100 ضرب کنی تا درصد بدست بیاید دقیقا همانطوری که نوشتم

ممنون از جوابت ولی
اول تقسیم بر 100 کنم و بعد جوابش رو ضرب در 100 ؟!!!!!!!!
چرا؟!!

یه بار تاپیک رو از اول بخون دوست عزیز

Rezahak
سه شنبه 30 شهریور 1389, 22:53 عصر
من نگفتم حتما تقسیم بر 100 کن
تقسیم بر هر عددی که توی مخرج کسر هست و بالطبع از فیلدهای database هست بکن
مهم اینه که اول نتیجه تقسم رو cast as float کنی سپس برای اینکه به درصد تبدیل کنی ضربدر 100 کنی
خب طبیعیه که اگر در مخرج کسر عدد 100 باشد حاصل پس از درصد گیری برابر همان صورت کسر است

بهزادصادقی
چهارشنبه 31 شهریور 1389, 03:57 صبح
جواب صحیح را آقای کفاش دادند.

فکر کنم اگر این کد را اجرا کنید می بینید مشکل از کجاست:



select 100 / 3; -- Answer: 33

select 100 / 3.0; -- Answer: 33.333333


اگر هر دو عددی که دارند تقسیم می شوند int باشند، SQL Server نوع نتیجه حاصله را int لحاظ می کند. اگر حتی یکی از دو عدد که دارند تقسیم می شوند real یا float یا decimal و غیره باشند، آن وقت SQL Server اعداد بعد از علامت ممیز را در نتیجه تقسیم همچنان نگه خواهد داشت و نتیجه را به عنوان یک عدد حقیقی حساب می کند.

MOJTABAATEFEH
شنبه 17 مهر 1389, 14:38 عصر
دوست عزیز من تو فرمولش مشکلی ندارم .
شما جواب یه سوال منو بدید :
100/3باید بشه 33.333333 ولی میشه 33
این اعشار چه جوری باید نمایش داده بشه

دوست عزیز نوع فیلد رو مثلا تا 3 یا 4 رقم اعشار تنظیم کنید


موفق باشید

HH2BN1990
شنبه 17 مهر 1389, 19:10 عصر
CONVERT(decimal(18,4), 100/3) ->>> 33.3333


SELECT CONVERT(decimal(18,2), P.UnitPrice/2)
FROM [Northwind].[dbo].[Products] P

بهزادصادقی
شنبه 17 مهر 1389, 20:07 عصر
[LEFT]CONVERT(decimal(18,4), 100/3) ->>> 33.3333


نه. شما اشتباه می کنید. فقط کافی است که خودتون توی SQL Server Management Studio این رو اجرا کنید:



select CONVERT(decimal(18,4), 100/3)


و خواهید دید که جواب 33.0000 خواهد بود. امتحانش کنید!

HH2BN1990
شنبه 17 مهر 1389, 20:43 عصر
نه. شما اشتباه می کنید. فقط کافی است که خودتون توی SQL Server Management Studio این رو اجرا کنید:



select CONVERT(decimal(18,4), 100/3)


و خواهید دید که جواب 33.0000 خواهد بود. امتحانش کنید!

درست می گید باید اینطوری می نوشتم



select CONVERT(decimal(18,4), 100.0/3)

select CAST(CAST(100 AS float)/3 AS decimal(18,4))


چون 100 از نوع عدد صحیح هست باید اول تبدیل به عدد اعشاری بشه بعد تقسیم بشه و سپس تعداد اعشار رو دوباره با تبدیل تعیین کنی