在 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)

我怎样才能做到这一点?

基于 @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 ║ ╚
═══════════════════╝

我会使用带有模数的案例语句。这是一种简单的方法,可以检查最后一个数字,看看它是偶数还是奇数,然后处理简单的加法。

declare @var decimal(6,2) = 2370.07
select
case 
when right(@var,1) % 2 != 0 
then @var + 0.01 
else @var 
end

或者,使用您的架构

select
[Actual Value]
,[RoundedValue] = 
case 
when right([Actual Value],1) % 2 != 0 
then [Actual Value]+ 0.01 
else [Actual Value]
end
From Your Table

最新更新