2015-10-16 128 views
0

我有一个很奇怪的SQL问题。我有一个数字为22的单元格,当我想将它舍入时,结果不正确。SQL四舍五入的错误

如果我尝试使用数字而不是单元格,代码运行良好。

select Mora2, round(Mora2/30,0)*30, mora2+1, 
round((mora2+1)/30,0)*30, round(convert(float,mora2)/30,0)*30 
from Trimestre 

的,其结果是

Mora2 (No column name) (No column name) (No column name) (No column name) 

22   30     23     30     30 

如果我尝试次数,代码效果很好。

select round(22/30,0)*30 as Mora2 

Mora2 
0 

为什么可能呢?

谢谢!

+3

Mora2的数据类型是什么?第二个例子是整数,你会得到一个不同的结果,如果你做22.0/30 –

+0

嗨,詹姆斯!数据类型是float!另外,我有28573个寄存器,但只有866个这样的错误!你知道那是为什么吗? – mschapiro

回答

1

无论何时使用它去除小数部分并确保整数除法,您都可以使用CAST(Mora2 AS INT)

当分子或分母不是整数时,除法的结果将有小数位。因此22.0/30 = 0.73333322/30 = 0

+0

是的!这就像你说的!用int来解决问题。奇怪的是,我不明白的是,我有28573个寄存器(全都像浮点数),而且数字相似,只有866个有这个问题! – mschapiro