Sql server sql server中的强制转换或转换出现意外结果

Sql server sql server中的强制转换或转换出现意外结果,sql-server,sql-server-2008,sql-server-2005,Sql Server,Sql Server 2008,Sql Server 2005,或 事实上,我期望的结果是5.5 但它正在返回5。为什么? 并告诉我获得结果的任何解决方案,如5.5使用60.0强制定点类型: SELECT CONVERT(FLOAT, 330/60) AS result 330/60的计算是作为整数进行的,这将对结果进行四舍五入。在那之后,你投到浮动。您可以从一开始就使用数字类型,无需强制转换: SELECT CAST (330/60.0 AS FLOAT) AS result SELECT CONVERT(FLOAT, 330/60.0) AS re

事实上,我期望的结果是5.5

但它正在返回5。为什么?

并告诉我获得结果的任何解决方案,如5.5

使用60.0强制定点类型:

SELECT CONVERT(FLOAT, 330/60) AS result
330/60的计算是作为整数进行的,这将对结果进行四舍五入。在那之后,你投到浮动。您可以从一开始就使用数字类型,无需强制转换:

 SELECT CAST (330/60.0 AS FLOAT) AS result
 SELECT CONVERT(FLOAT, 330/60.0) AS result

与其将答案转换为float,不如尝试将分母转换为float,然后进行除法

SELECT 330/60.0 AS result
或者按照juergen d的建议,更改分母以包含小数部分

 Select 330/CAST(60 as float) as result

为什么选择CONVERTFLOAT,330/60作为结果5,因为第一个330/60被评估。之后,将转换为浮动。整数不能有浮点结果。60.0是numeric3,1数据类型,而不是float。6E1将是float@MartinSmith:谢谢你的提示。在答案中更改了它。
 Select 330/CAST(60 as float) as result
 SELECT CAST (330/60.0 AS FLOAT) AS result