VinnarenMedlem sedan sep. 2005833 inlägg har följande:
DECLARE @ToPay decimal(16,2)
INSERT INTO [order](CustId, PayId, Orderdate, PayPrice, Message)
VALUES(@CustId, @PayId, getdate(), @ToPay, @Message)
Nu vill jag avrunda @ToPay till en korrekt betalningssumma. tex har den värdet 100.35 så ska de avrunda till 100.50 osv
Hur löser man detta??
Anv mssql
Tacksam för all hjälp :stud
freddykMedlem sedan okt. 2006103 inlägg Du kanske kan splitta talet och ta delen efter (.) och arbeta med det för avrundning uppåt/neråt? Därefter slå ihop igen.
freddyk skrev:
Du kanske kan splitta talet och ta delen efter (.) och arbeta med det för avrundning uppåt/neråt? Därefter slå ihop igen.
Lekte lite med freddyk's förslag..
DECLARE @ToPay decimal(16,2)
DECLARE @After varchar(10)
DECLARE @Before varchar(10)
DECLARE @Concated Varchar(16)
/* Exempel på värdet*/
SET @ToPay = 101.54
/* Hämta det som är efter punkten i @ToPay*/
SET @After = SUBSTRING(Convert(char,@ToPay),CHARINDEX('.',@ToPay) + 1,LEN(@ToPay))
/* Hämta det som är före punkten i @ToPay */
SET @Before = SUBSTRING(Convert(char,@ToPay),0,CHARINDEX('.',@ToPay))
if Convert(int, @After) < 50
Begin
Select @ToPay As NotRounded, @Before + '.50' As Rounded
End
Else
Begin
Select @ToPay As NotRounded, Convert(decimal, @Before + 1) As Rounded
End
Sen beror det lite på vilka avrundningsregler man vill ha..
Du kan ju pröva denna i Management Studio och testa dig fram..
TroxyMedlem sedan mars 20041 505 inlägg Här är en lite enklare variant :moose
DECLARE @ToPay DECIMAL(16,2)
SET @ToPay = 10.35
SET @ToPay = (ROUND((@ToPay * 2), 0) / 2)
SELECT @ToPay
I detta fall får jag ut 10.50 (SQL 2000) :birp