如何通过除以两个整数值来获得浮点结果?

时间:2012-07-30 09:51:43

标签: sql-server sql-server-2008 division rounding

当我在2个整数之间进行除法时,我想指定小数位数,如:

select 1/3

目前返回0。我希望它返回0,33

类似的东西:

select round(1/3, -2)

但这不起作用。我怎样才能达到预期的效果?

8 个答案:

答案 0 :(得分:230)

如果您正在寻找常数,那么来自stb和xiowl的建议很好。如果需要使用整数的现有字段或参数,可以先将它们转换为浮点数:

SELECT CAST(1 AS float) / CAST(3 AS float)

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

答案 1 :(得分:58)

因为SQL Server执行整数除法。试试这个:

select 1 * 1.0 / 3

当您将整数作为参数传递时,这很有用。

select x * 1.0 / y

答案 2 :(得分:37)

没有必要同时施放它们。除法的结果数据类型始终是具有较高data type precedence的数据类型。因此解决方案必须是:

SELECT CAST(1 AS float) / 3

SELECT 1 / CAST(3 AS float)

答案 3 :(得分:22)

使用

select 1/3.0

这将完成这项工作。

答案 4 :(得分:10)

可能会迟到一点,但要意识到MySQL中不允许CAST FLOAT,并且当您尝试CAST(1 AS float) MySQL dev时会出现错误}。

对此的解决方法很简单。只是做

(1 + 0.0)

然后使用ROUND来获得特定数量的小数位,例如

ROUND((1+0.0)/(2+0.0), 3)

上面的SQL将1除以2并将float返回到3个小数位,就像0.500一样。

可以CAST以下类型:二进制,字符,日期,日期时间,十进制,json,nchar,签名,时间,无符号

答案 5 :(得分:7)

看起来这个技巧在SQL Server中起作用并且更短(基于以前的答案)

SELECT 1.0*MyInt1/MyInt2

或者:

SELECT (1.0*MyInt1)/MyInt2

答案 6 :(得分:3)

使用此

#define IDIOM UI_USER_INTERFACE_IDIOM() #define IPAD UIUserInterfaceIdiomPad if ( IDIOM == IPAD ) { /* do something specifically for iPad. */ } else { /* do something specifically for iPhone or iPod touch. */ }

这里的sql首先转换为float或乘以1.00。哪个输出将是一个浮点数。这里我考虑2位小数。你可以选择你需要的东西。

答案 7 :(得分:2)

如果你来到这里(就像我一样)找到整数值的解决方案,这就是答案:

CAST(9/2 AS UNSIGNED)

返回5