Sql server舍入问题下至2位小数

时间:2016-02-23 12:47:07

标签: sql sql-server

我遇到一个问题,让我的“舍入到2位小数”按照我的预期行事。 试试这个简单的例子

declare @num numeric (18,2)
declare @vat numeric (18,2)
set @num = 11729.83
set @vat = 1.14
select round(@num/@vat,2)

我得到10289.320000的答案,但我应该得到10289.33。完整的未舍入数字是10289.324561403508771929824561404(除非我的数学完全关闭)

6 个答案:

答案 0 :(得分:1)

尝试转换为小数:

select cast(round(@num / @vat, 2) as numeric(18, 2))

我主张round()明确转换方法。

答案 1 :(得分:1)

Round可以返回低于原始值的值,也可以返回高于原始值的值。实际上它返回最接近原始值的值。

如果你想系统地将数字四舍五入到它的较低或较高值,你可以使用FLOOR或CEILING(感谢@GarethD在CEILING上刷新我的记忆......)

select round(floor(100*@num/@vat)/100,2) -> lower value
select round(ceiling(100*@num/@vat)/100,2) -> upper value

否则当值严格低于10289.325(这是这种情况)时,round确实会返回10289.32

答案 2 :(得分:0)

试试这个

'medium-size

答案 3 :(得分:0)

试试这个

declare @num numeric (18,2)
declare @vat numeric (18,2)
set @num = 11729.83
set @vat = 1.14
select round(Convert(Decimal(18,3),(@num/@vat)),2)

答案 4 :(得分:-1)

我不确定我是否理解正确。但也许你一直在寻找这样的东西:

select  round(round(round(round(@num / @vat, 5), 4), 3), 2)

答案 5 :(得分:-1)

您需要再次将其转换为适当的十进制类型:

SELECT CONVERT(DECIMAL(18,2), ROUND(@NUM/@VAT,2))