一个参数是要处理的数据,另外一个参数是有效位数的长度,返回处理好后的数据;比如: 0.123 保留两个有效位数是0.12
0.125 保留两个有效位数是0.13
123 保留两个有效位数是120
125 保留两个有效位数是130
谢谢大家了
0.125 保留两个有效位数是0.13
123 保留两个有效位数是120
125 保留两个有效位数是130
谢谢大家了
调试欢乐多
--SELECT @num=-123.11
SELECT @num=123
--SELECT @num=0.14786
SELECT @i=2
SELECT @n=ABS(@num)IF @n<1 --当@n为小数
SET @s=LEFT(@n,@i+2)
ELSE
BEGIN
IF @i>=LEN(CAST(@n AS INT)) AND @i<=LEN(@n)
SET @s=LEFT(@n,@i+1)
ELSE IF @i>LEN(@n)
SET @s=CONVERT(VARCHAR(100),@n) + REPLICATE('0',@i-LEN(@n))
ELSE
SET @s=LEFT(@n,@i) + REPLICATE('0',LEN(CAST(@n AS INT))-@i) END
SELECT @s=(CASE WHEN @num>0 THEN '' ELSE '-' END) + @sPRINT @s
自己去改成函数语法.
(@num DECIMAL(20,7),@i INT)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @n DECIMAL(20,7),@s VARCHAR(100)
SELECT @n=ABS(@num)IF @n<1 --当@n为小数
SET @s=LEFT(@n,@i+2)
ELSE
BEGIN
IF @i>=LEN(CAST(@n AS INT)) AND @i<=LEN(@n)
SET @s=LEFT(@n,@i+1)
ELSE IF @i>LEN(@n)
SET @s=CONVERT(VARCHAR(100),@n) + REPLICATE('0',@i-LEN(@n))
ELSE
SET @s=LEFT(@n,@i) + REPLICATE('0',LEN(CAST(@n AS INT))-@i) END
SELECT @s=(CASE WHEN @num>0 THEN '' ELSE '-' END) + @sRETURN @s
END----------------------------
SELECT dbo.CutNUM(123.11,2)
/*
120
*/
SELECT dbo.CutNum(-127.45,7)
/*
-127.4500
*/