34,594
社区成员
发帖
与我相关
我的任务
分享
--改一下,可以处理到小数的后14位:
IF OBJECT_ID('roundup') IS NOT NULL
DROP FUNCTION roundup
GO
CREATE FUNCTION roundup(
@num DECIMAL(38,15),
@i INT --要保留的小数位数
) RETURNS DECIMAL(38,15)
AS
BEGIN
RETURN(
CAST(CEILING(@num*POWER(CAST(10 AS BIGINT),@i)) AS DECIMAL(38,15))/
POWER(CAST(10 AS BIGINT),@i)
)
END
GO
--调用:
SELECT dbo.roundup(3.11111111111111111,14)
/*
---------------------------------------
3.111111111111120
(1 行受影响)
*/
--写个自定义函数处理:
IF OBJECT_ID('roundup') IS NOT NULL
DROP FUNCTION roundup
GO
CREATE FUNCTION roundup(
@num DECIMAL(38,10),
@i INT --要保留的小数位数
) RETURNS DECIMAL(38,10)
AS
BEGIN
RETURN(CEILING(@num*POWER(10.,@i))/POWER(10,@i))
END
GO
--调用:
SELECT dbo.roundup(3.14345,3)
/*
---------------------------------------
3.1440000000
(1 行受影响)
*/
可以变通这样:
DECLARE @i dec(9,5)=3.14345
SELECT CEILING(@i*100)/100. --保留两位