select round((cast(56/3 AS DECIMAL (4,2))),1)
显示18输出而不是19,其中实际值为18.66。 我的回合功能不起作用 请帮忙。
答案 0 :(得分:2)
问题是56/3
是整数计算,这意味着没有浮点数。
您需要在初始计算中使用浮点数,例如56.0/3
。此外,如果你想要舍入到19然后你需要舍入到最近的整个号码,ROUND(x, 1)
将舍入到第一个小数位 - 你需要将0
传递给最高可达19岁。
SELECT ROUND((CAST(56.0/3 AS DECIMAL (4,2))),0)
或者,您可以为ROUND
切换CEILINGselect CEILING(CAST(56.0/3 AS DECIMAL(4,2)))
答案 1 :(得分:1)
您的代码部分:
CAST( 56/3 AS DECIMAL )
首先评估返回18的56/3
。然后将其转换为十进制,得到18.0。
你需要在分割之前施放分子或分母。
round
功能正常运行 - 它只是没有使用您认为的输入。
答案 2 :(得分:1)
在分割数字之前转换其中一个整数值:
select round(56/convert(DECIMAL (4,2),3),0);
如果你不这样做,你划分整数,导致18而不是18.66