首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问为何这样的表达式结果始终为0

2012-03-03 
请教为何这样的表达式结果始终为0SELECTcast((1/3)asfloat)assdcSELECTconvert(float,(1/3))assdcSELECT(1

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

热点排行