Sql server 将该值四舍五入至最接近的50
我正试图把这个值四舍五入到最接近的50。 1-50它应该四舍五入到00以下,当它的51休息时,它应该四舍五入到50 例:Sql server 将该值四舍五入至最接近的50,sql-server,rounding,Sql Server,Rounding,我正试图把这个值四舍五入到最接近的50。 1-50它应该四舍五入到00以下,当它的51休息时,它应该四舍五入到50 例: 245(在1-49之前)其应四舍五入到200 258(从50-99)则应四舍五入至250 我试过这个,很好,但我需要的不是案件陈述 @ResultAmount = ROUND(@ResultAmount, -2, 1) + CASE WHEN RIGHT(CONVERT(INT, FLOOR(@ResultAmount)), 2) IN (00, 50)
- 245(在1-49之前)其应四舍五入到200
- 258(从50-99)则应四舍五入至250
@ResultAmount = ROUND(@ResultAmount, -2, 1) +
CASE WHEN RIGHT(CONVERT(INT, FLOOR(@ResultAmount)), 2) IN (00, 50)
THEN RIGHT(CONVERT(INT, FLOOR(@ResultAmount)), 2)
WHEN RIGHT(CONVERT(INT, FLOOR(@ResultAmount)), 2) BETWEEN 1 AND 49
THEN 00
WHEN RIGHT(CONVERT(INT, FLOOR(@ResultAmount)), 2) BETWEEN 51 AND 99
THEN 50
END
提前感谢 听起来好像数字0-50被四舍五入到“50”,但是任何大于这个数字的数字都应该四舍五入到最接近的50。类似于以下的方法应该可以工作:
(CASE WHEN f1/50 < 1 THEN 1 ELSE ceiling(f1/50) END) * 50 AS rounded_to_50
(当f1/50<1时,则1个其他天花板(f1/50)结束)*50四舍五入到50
您只需将数字除以50,四舍五入,然后再乘以50即可,例如:
select cast(round(@i/50.0,0)*50 as int)
如果@i
为524,则返回500;如果@i
为525,则返回550
您可以创建一个函数来简化此操作:
create function fn_Round_By(@input int,@divider float)
returns int
as
begin
RETURN (cast(round(@input/@divider,0)*@divider as int));
end
同样,选择dbo.fn\u Round\u By(525,50)
返回550和
选择dbo.fn\u Round\u By(524,50)`返回500
如果要将小于50的值四舍五入到50,可以使用简单的案例
,例如:
create function fn_Round_By(@input int,@divider float)
returns int
as
begin
RETURN (
CASE
WHEN @input <=@divider then @divider
else cast(round(@input/@divider,0)*@divider as int)
END
);
end
或者,保留50以下的逻辑:
create function fn_Floor_By(@input int,@divider float)
returns int
as
begin
RETURN (
CASE
WHEN @input <=@divider then @divider
else cast(FLOOR(@input/@divider)*@divider as int)
END
);
end
创建函数fn\u Floor\u By(@input int,@divider float)
返回整数
作为
开始
返回(
案例
当@input时,这就是您所需要的全部
SELECT FLOOR(@ResultAmount / 50) * 50;
e、 g以下
declare @ResultAmount decimal(10,2) = 249;
SELECT FLOOR(@ResultAmount / 50) * 50;
SET @ResultAmount = 250;
SELECT FLOOR(@ResultAmount / 50) * 50;
SET @ResultAmount = 200;
SELECT FLOOR(@ResultAmount / 50) * 50;
SET @ResultAmount = 199;
SELECT FLOOR(@ResultAmount / 50) * 50;
您可以计算模50并使用它来减少原始值
DECLARE @ResultAmount int = 243
SELECT @ResultAmount - (@ResultAmount%50)
只需将数字除以50(num/50),如果结果“R”为奇数,余数(num%50)为gt 0,则(R+1)*50,否则R*50我读对了吗?1-50应该是50,245应该是200,然后258又是300?向上/向下的逻辑是什么?@Jamiec我想和2.45
是2
的四舍五入,但是2.55
四舍五入到3
@Jamiec但是你是245
中最接近的50是250
,而不是200
,所以基本上任何带有模式*5x-*9x
的值都应该四舍五入到*50
,任何带有*0x-*4x
的值都应该四舍五入到*00
1073到1050,1023到1000,等等。50的精确倍数是多少?比如50?保持在50还是降到0?为什么不检查f1(案例f1感谢帮助进行了一个小的更正!!其lke应始终向下取整。..lke如果是230,则应向200取整,如果是260或280,则应向250取整!!向下取整由FLOOR
函数执行,但您的示例相互矛盾,例如230应被截断为200,但258应变为300但260变为250?您想要的逻辑到底是什么?我想执行向下取整lke,如果它的230应该向下取整为200,如果它是258或280(51-99之间的任何值)它应该四舍五入到250!!!thanks@kris然后请修正问题文本,并明确表示您想要向下舍入。我已经在答案中添加了使用FLOOR
的函数。这是您想要的吗?需要注意的一点是,这是向下舍入(这是OP要求的)。
DECLARE @ResultAmount int = 243
SELECT @ResultAmount - (@ResultAmount%50)