T-SQL 的 Round 函数的疑问
用于四舍五入,今天一个哥们遇到一个关于 Round() 问题,查了下资源整理如下:
Round(p1, p2, p2)
- p1, 传入值, 结果会返回与它同类型的值
例如 p1 为 0.00001,结果就是 0.00000
2. p2, 为正值时,【舍入】或【丢弃】小数点后面的值
1 SELECT ROUND(99.7654, 1) -- 返回 99.8000 舍入小数点后第1位 2 SELECT ROUND(99.7654, 2) -- 返回 99.7700 舍入小数点后第2位 3 4 SELECT ROUND(99.7654, 1, 1) -- 返回 99.7000 对小数点后第1位后面的值做丢弃操作 5 SELECT ROUND(99.7654, 2, 1) -- 返回 99.7600 对小数点后第2位后面的值做丢弃操作
3. P3,可选参数,只有两种情况,0 或 非0,默认为0
当为 0 时, 为舍入;非 0 时为丢弃
1 SELECT ROUND(99.7654, 2, 0) -- 返回 99.7700 对小数点后第2位后面的值做舍入 2 SELECT ROUND(99.7654, 2, 1) -- 返回 99.7000 对小数点后第2位后面的值做丢弃操作 3 SELECT ROUND(99.7654, 2, -100) -- 返回 99.7000 与前一种情况结果一样,对小数点后第2位后面的值做丢弃操作
P3 还可以是函数,这在内置函数中不多见,下面的测试函数,当为 A 时舍入, 不为 A 丢掉
1 /** 2 Author: MikeDeng 3 Date:2014-06-28 4 用途: 测试Round,当是 A 时舍入,不为 A 时丢弃 5 **/ 6 CREATE FUNCTION fun_Ignore (@V1 CHAR(1)) 7 RETURNS INT 8 AS 9 BEGIN 10 RETURN (CASE WHEN @V1 = 'A' THEN 0 ELSE 1 END) 11 END
执行效果:
1 SELECT ROUND(99.7654, 2, dbo.fun_Ignore('A')) -- 返回 99.7700, 舍入 2 SELECT ROUND(99.7654, 2, dbo.fun_Ignore('B')) -- 返回 99.7600, 丢弃
浙公网安备 33010602011771号