1.4→1
1.6→2
1.5→2
2.5→2
ALTER FUNCTION [dbo].[FN_ChangeNumber](@money decimal(18,2))
RETURNS Int
AS
BEGIN
declare @intvalue int,@decimalvalue int,@retvalue int
--取整數和小數第一位
select @intvalue=substring(Convert(nvarchar(20),@money),1, charindex('.', Convert(nvarchar(20),@money))-1) , @decimalvalue=substring(substring(Convert(nvarchar(20),@money), charindex('.', Convert(nvarchar(20),@money))+1 , len(Convert(nvarchar(20),@money))-charindex('.', Convert(nvarchar(20),@money))) ,1,1)
if(@decimalvalue<=4)begin set @retvalue=@intvalue end
if(@decimalvalue>=6)begin set @retvalue=@intvalue+1 end
if(@decimalvalue=5)begin
if(@intvalue%2=0) set @retvalue=@intvalue
else set @retvalue=@intvalue+1
end
RETURN @retvalue
END
感謝Keen協助
1 則留言:
我修改一下取整數及小數第一位的程式,這樣在程式日後的閱讀上會比較輕鬆
DECLARE @intvalue INT
DECLARE @decimalvalue INT
DECLARE @retvalue INT
--取整數和小數第一位
--@money%1 為小數位
SELECT @intvalue= @money - (@money%1)
SELECT @decimalvalue = LEFT(REPLACE(CAST(@money-1 AS VARCHAR), '0.', ''), 1) --去除小數符號及前面的0,並取小數第一位
IF(@decimalvalue<=4)
BEGIN
SET @retvalue=@intvalue
END
IF(@decimalvalue>=6)
BEGIN
SET @retvalue=@intvalue+1
END
IF(@decimalvalue=5)
BEGIN
IF(@intvalue%2=0)
SET @retvalue=@intvalue
ELSE
SET @retvalue=@intvalue+1
END
RETURN @retvalue
張貼留言