首页 > 解决方案 > 在 SQL Server 中四舍五入十进制值

问题描述

我有一列包含数值数据(浮点数),需要四舍五入唯一的十进制值。

    Actual Value  Rounded Value
    2370.09 -->   2370.10
    2370.07 -->   2370.08
    2370.05 -->   2370.06
    2370.01 -->   2370.02
    2370.02 -->   2370.02
    2370.04 -->   2370.04
    2370.06 -->   2370.06
    2370.08 -->   2370.08

如果十进制值(句点后)是奇数,则应增加 0.01,如果是偶数,则该值没有变化。

我试过了SELECT ROUND(Actual Value, 1)

我怎样才能使这项工作?

标签: sqlsql-serverrounding

解决方案


基于@scsimon 提供的另一个答案中的模数示例,您可以在没有这样的 case 语句的情况下执行此操作:

DECLARE @t TABLE
(
    n numeric(10,2) NOT NULL
);
INSERT INTO @t (n)
VALUES (2370.09)
    , (2370.07)
    , (2370.06)
    , (0)
    , (1.01)
    , (1.09)
    , (1.9)
    , (9999.99);

SELECT (t.n + (t.n % 0.02))
FROM @t t;
╔══════════════════╗
║(无列名)║
╠══════════════════╣
║ 2370.10 ║
║ 2370.08 ║
║ 2370.06 ║
║ 0.00 ║
║ 1.02 ║
║ 1.10 ║
║ 1.90 ║
║ 10000.00 ║
╚══════════════════╝

推荐阅读