请教为何这样的表达式结果始终为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的就有正确的结果了