数学表达式返回零

时间:2013-07-23 12:12:54

标签: sql sql-server sql-server-2008

很抱歉提出一个愚蠢的问题,但是这个问题让我很难过。

SELECT 
81234 / 160000 * 100                    AS Try1,
CAST((81234 / 160000 * 100) AS float)   AS Try2

答案是50.77125,但两个值都返回零。有什么问题?

谢谢,

7 个答案:

答案 0 :(得分:7)

尝试使用小数点。

这样的东西
SELECT 
81234 / 160000 * 100                    AS Try1,
CAST((81234 / 160000 * 100) AS float)   AS Try2,
81234. / 160000. * 100.                    AS Try3

SQL Fiddle DEMO

来自/ (Divide) (Transact-SQL)

  

如果整数被除数除以整数除数,则结果为   截断结果的任何小数部分的整数。

答案 1 :(得分:3)

你是用int实现一个除法

试试这个:

SELECT 
cast(81234 as float) / cast(160000 as float) * 100

SELECT 
81234.00 / 160000.00 * 100

答案 2 :(得分:2)

试试这个

SELECT 
81234.00 / 160000 * 100                    AS Try1,
CAST((81234.00 / 160000 * 100) AS float)   AS Try2

您要划分一个被视为整数的数字。因此,通过添加两个小数,它将转换为十进制数,并显示小数。

在你的情况下,除法81234/160000导致0,乘以100仍为0。

答案 3 :(得分:2)

原因是81234 / 160000是一个整数除法,所以它返回0,强制它像81234. / 160000一样浮动,它会起作用

答案 4 :(得分:1)

你正在进行整数除法。 81234/160000给出零。乘以100,它仍为零。

在进行分割之前尝试转换为浮点数。

答案 5 :(得分:1)

更改您的查询,如下所示

SELECT 
 81234.00 / 160000 * 100                    AS Try1,
 CAST((81234.00 / 160000 * 100) AS float)   AS Try2

** 81234.00 / 160000通过手动通过sql返回0.5077125它会认为是整数分区所以它将返回值0。

答案 6 :(得分:1)

实际上,值81234是整数,如果你设置一个整数,它将返回整数,只有81234一致,才能返回float

SELECT (CONVERT(FLOAT,81234) / 160000) * 100 AS Try1, ((CONVERT(FLOAT,81234) / 160000 * 100) AS Try2

由于 Ashutosh Arya