You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server数值下取整与SQL数值四舍五入实现方法咨询

SQL Server数值舍入问题解决方案

嘿,针对你提出的两个数值处理问题,我来逐一拆解解答:

问题1:如何将6.15向下取整为6.1(保留一位小数)

在SQL Server里,要实现保留一位小数的向下取整,有两种简单可靠的方法:

  • 方法一:利用FLOOR()函数
    思路是先把目标数值放大10倍,让需要保留的小数位变成整数部分,再用FLOOR()取小于等于该值的最大整数,最后再缩小10倍还原格式:

    SELECT FLOOR(6.15 * 10) / 10 AS RoundedValue;
    -- 执行结果:6.1
    

    这个方法对正数的向下取整非常有效,逻辑清晰易懂。

  • 方法二:使用ROUND()的截断模式
    ROUND()函数的第三个参数如果设为1,会触发截断操作(而非默认的四舍五入)。指定保留一位小数后,直接丢弃第二位及之后的小数:

    SELECT ROUND(6.15, 1, 1) AS RoundedValue;
    -- 执行结果:6.1
    

    这里第二个参数1代表保留1位小数,第三个参数1代表执行截断,适合快速实现正数的向下取整。

问题2:如何对指定数值舍入得到目标结果

首先要注意:SQL Server的ROUND()默认采用银行家舍入法(四舍六入五成双)——当尾数是5时,会让前一位变成偶数。比如默认情况下ROUND(6.15, 1)会返回6.2,但你的需求是得到6.1,所以需要针对性处理:

方案1:混合处理(四舍五入+特定值向下取整)

针对你给出的数值列表,大部分可以用标准四舍五入,6.15单独用向下取整:

SELECT
  ROUND(35.38, 1) AS Value1,   -- 输出:35.4
  ROUND(53.08, 1) AS Value2,   -- 输出:53.1
  FLOOR(6.15 * 10) / 10 AS Value3, -- 输出:6.1
  ROUND(5.38, 1) AS Value4;    -- 输出:5.4

方案2:强制传统四舍五入(若需统一规则)

如果你想要彻底避开银行家舍入,实现传统的“尾数≥5就进1”,可以给数值加一个极小的偏移量来调整舍入方向。但针对6.15你需要舍而非入,所以要反向调整:

SELECT
  ROUND(35.38 + 0.0000001, 1) AS Value1, -- 35.4
  ROUND(53.08 + 0.0000001, 1) AS Value2, -- 53.1
  ROUND(6.15 - 0.0000001, 1) AS Value3,  -- 6.1
  ROUND(5.38 + 0.0000001, 1) AS Value4;  -- 5.4

这个偏移量要足够小,避免影响其他数值的正常舍入,比如0.0000001就不会干扰到小数点后两位的判断。

内容的提问来源于stack exchange,提问作者Girish Mulgund

火山引擎 最新活动