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, 丢弃
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?