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

LaB*_*cca 159 sql-server rounding division sql-server-2008

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

select 1/3
Run Code Online (Sandbox Code Playgroud)

目前返回0.我希望它能回来0,33.

就像是:

select round(1/3, -2)
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ard 250

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

SELECT CAST(1 AS float) / CAST(3 AS float)
Run Code Online (Sandbox Code Playgroud)

要么

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
Run Code Online (Sandbox Code Playgroud)

  • SELECT 1.0*MyInt1/MyInt2 (23认同)
  • SELECT ROUND(CAST(1 AS float)/ CAST(3 AS float),2)谢谢 (9认同)
  • 或者,如果您想要小数结果,也可以将它们转换为小数。 (2认同)
  • 不需要分配股息和除数,请参阅@MS'回答http://stackoverflow.com/a/30639343/2866644 (2认同)

xia*_*owl 64

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

select 1 * 1.0 / 3
Run Code Online (Sandbox Code Playgroud)

将整数作为参数传递时,这很有用.

select x * 1.0 / y
Run Code Online (Sandbox Code Playgroud)

  • 您甚至可以省略零。 (2认同)

M.S*_*.S. 39

没有必要同时施放它们.除法的结果数据类型始终是具有更高数据类型优先级的数据类型.因此解决方案必须是:

SELECT CAST(1 AS float) / 3
Run Code Online (Sandbox Code Playgroud)

要么

SELECT 1 / CAST(3 AS float)
Run Code Online (Sandbox Code Playgroud)


stb*_*stb 26

使用

select 1/3.0
Run Code Online (Sandbox Code Playgroud)

这将完成这项工作.


Sup*_*hin 12

可能有点晚了,但要意识到CASTING以FLOAT未在MySQL允许的,当你试图将引发错误CAST(1 AS float)的在规定的MySQL的开发.

解决方法很简单.做就是了

(1 + 0.0)
Run Code Online (Sandbox Code Playgroud)

然后ROUND用来实现特定的小数位数

ROUND((1+0.0)/(2+0.0), 3)
Run Code Online (Sandbox Code Playgroud)

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

可以CAST使用以下类型:binary,char,date,datetime,decimal,json,nchar,signed,timeunsigned.

  • MySQL确实允许`CAST`,它只是不允许转换为`FLOAT`.转而使用`DECIMAL`.请参阅/sf/ask/515771441/. (3认同)

Tro*_*glo 7

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

SELECT 1.0*MyInt1/MyInt2
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT (1.0*MyInt1)/MyInt2
Run Code Online (Sandbox Code Playgroud)

  • 我最喜欢这个,甚至可以很好地用于百分比计算:`SELECT 100.0 * @Elapsed / @ Total` (2认同)