我遇到一个问题,让我的“舍入到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(除非我的数学完全关闭)
答案 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))