在sqlserver中舍入

时间:2014-08-13 07:33:36

标签: sql-server tsql rounding

我想要产品价格的第3轮最后一位数,在250, 样本:当3的最后一个数字位于1到249,9之间时,它舍入为0,当介于250到499.9舍入到500之间时,501到749.9之间再次显示500并且750到999.9显示1000。 怎么办呢?

更多desc: 我有一个存储过程,必须计算产品的最终价格..当它,我们有一个数字在最后,如626300.00 ....现在我想要最后的价格乘以3最后一位数,如果这3个数字是&LT; 250将这3个数字设置为000,如果> 250且<1。 500显示500 .if> 500且&lt; 500&gt; 70再次显示500,并且如果&gt; 750和&lt; 999.9显示000并添加1到4位数。

3 个答案:

答案 0 :(得分:0)

假设您的价格值存储为数字,例如类型decimal (18,2),您可以执行以下操作:

declare @var decimal(18,2) = '324156.49'

select 
case 
    when @var%1000 between 0 and 249.9 then 1000*cast(@var /1000 as int) + 0
    when @var%1000 between 250 and 749.9 then 1000*cast(@var /1000 as int) + 500
    else 1000*cast(@var /1000 as int) + 1000
end

模数1000将为您提供最后3位数加上小数点后的任何内容。然后将适当的舍入金额添加到原始价格的数千部分中。

Demo

答案 1 :(得分:-1)

declare @t table (
    Val money not null primary key
);

insert into @t
values
    (7.27),
    (4.11),
    (2.83),
    (3.67);

select t.Val, floor(t.Val) + round((t.Val - floor(t.Val)) * 2, 0) / 2
from @t t;

答案 2 :(得分:-1)

查看此结果。

DECLARE @TAB TABLE (VAL INT)
INSERT INTO @TAB VALUES (1),(100),(450),(499),(750),(900),(321)

SELECT VAL,((VAL/250) + 1) * 250 yourVal FROM @TAB 

编辑:对前一个答案感到抱歉。见下文。

DECLARE @TAB TABLE (VAL VARCHAR(40))
INSERT INTO @TAB VALUES ('1305'),('34'),('606'),('890'),('2005')

SELECT 
VAL,
((CAST(RIGHT(VAL,3) AS INT)/500) * 500) + ((CAST(RIGHT(VAL,3) AS INT)/250)%2) * 500 [yourVal]
FROM @TAB

结果:

enter image description here


更多测试..!

DECLARE @TAB TABLE (VAL NVARCHAR(40))
INSERT INTO @TAB VALUES ('0'),('249'),('250'),('499'),('500'),('502'),('750'),('749'),('1000'),('1002')

结果:

enter image description here