3

很抱歉问了一个愚蠢的问题,但这让我很困惑。

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

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

谢谢,

4

7 回答 7

7

尝试使用小数点。

就像是

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

SQL 小提琴演示

/(除)(Transact-SQL)

如果整数被除数除以整数除数,则结果是一个整数,结果的任何小数部分都被截断。

于 2013-07-23T12:14:11.143 回答
3

您正在按 int 执行除法

尝试这个:

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

或者

SELECT 
81234.00 / 160000.00 * 100
于 2013-07-23T12:14:48.100 回答
2

尝试这个

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

您正在划分一个被认为是整数的数字。因此,通过添加两位小数,它被转换为十进制数并显示小数。

在您的情况下,除法 81234 / 160000 得到 0,乘以 100 仍然是 0。

于 2013-07-23T12:14:12.043 回答
2

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

于 2013-07-23T12:16:45.663 回答
1

你正在做整数除法。81234/160000 给出零。乘以 100 仍然为零。

在进行除法之前尝试转换为浮点数。

于 2013-07-23T12:16:42.637 回答
1

如下更改您的查询

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

** 81234.00 / 160000 通过 sql 手动返回 0.5077125 它会认为是整数除法,因此它将返回值 0。

于 2013-07-23T12:19:17.593 回答
1

实际上,值 81234 是整数,如果您指定一个整数,它将返回整数,只有将 81234 放入浮点数将返回浮点数

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

谢谢阿舒托什艾莉亚

于 2013-07-23T12:22:58.243 回答