【发布时间】:2010-08-09 19:56:23
【问题描述】:
在 Microsoft SQL Server 2005 中,为什么以下命令会产生整数结果?
SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
【问题讨论】:
标签: sql-server-2005
在 Microsoft SQL Server 2005 中,为什么以下命令会产生整数结果?
SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
【问题讨论】:
标签: sql-server-2005
首先,您得到两个整数的结果,然后将结果转换为 DECIMAL(9,2)。在第二个中,您只是将两个整数相除,这是意料之中的。
如果你将其中一个整数转换为小数在你进行除法,你会得到一个小数结果。
SELECT 151/CAST(6 AS DECIMAL (9,2))
【讨论】:
不能直接回答您的问题。如果您在SSRS中需要这个,仍然值得看看Operators in Expressions
/ 将两个数字相除并返回一个浮点结果。
\ 将两个数字相除并返回一个整数结果。
Mod 返回除法的整数余数。
【讨论】:
是的,这是标准行为
做
SELECT 151/6.0
或
SELECT 151/(CONVERT(DECIMAL(9,2),6))
或
SELECT 151/(6 * 1.0)
【讨论】:
您还需要为小数位指定一个占位符
SELECT 151.000000/6
OR
SELECT 151/6.000000
两者都会产生
25.16666666
【讨论】:
因为 151 和 6 是整数,而且您正在进行整数除法,甚至在强制转换之前。
您需要确保至少有一个参数是浮点类型:
SELECT 151.0/6
或者
SELECT 151/6.0
【讨论】:
试试这个:
SELECT 1.0*cast(151/6 AS DECIMAL(9,2))
SELECT 1.0*151/6
【讨论】:
出于与 C#、Java 和其他主流语言相同的原因。
在整数算术中,CAST 在数学之后...
【讨论】:
CAST 语句有点冗长。您可以改用以下内容:
DECLARE @TO_FLOAT FLOAT = 1.0;
SELECT (1 * @TO_FLOAT) / 2;
如果您愿意,也可以使用不同的乘数类型,例如 DECIMAL。
【讨论】:
Float 与 decimal 不同。例如,可以将浮点文字指定为 1e0。