日期:2014-05-19  浏览次数:20387 次

请教为何这样的表达式结果始终为0
SELECT   cast((1/3)as   float)as   sdc
SELECT   convert(float,(1/3))as   sdc
SELECT   (1/3)   as   sdc

我就是想不通为何这样的表达式结果始终为0

------解决方案--------------------
SELECT cast((1/3)as float)as sdc
先进性整数除法1/3=0,再cast

SELECT convert(float,(1/3))as sdc
一样
SELECT (1/3) as sdc
一样

应该

SELECT cast((1.0/3)as float)as sdc

SELECT convert(float,(1.0/3))as sdc

SELECT (1.0/3) as sdc


------解决方案--------------------
或者
SELECT cast(1 as float)/3 as sdc
SELECT convert(float,1)/3))as sdc

------解决方案--------------------
原因是sql server的除法是默认其结果的精度为被除数的精度。楼主的例子中被除数均为1,其精度为整数,所以结果都为0。
------解决方案--------------------
1/3是用整型进行运算的,结果为0
要在运算之前对1或者3中的一个进行强制类型转化成FLOAT的就有正确的结果了