如何通过使用 T-SQL 将两个整数值相除来获得浮点结果?

Posted

技术标签:

【中文标题】如何通过使用 T-SQL 将两个整数值相除来获得浮点结果?【英文标题】:How to get a float result by dividing two integer values using T-SQL? 【发布时间】:2012-07-27 23:25:32 【问题描述】:

使用 T-SQL 和 Microsoft SQL Server 我想在两个整数之间进行除法时指定小数位数,例如:

select 1/3

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

类似:

select round(1/3, -2)

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

【问题讨论】:

你试过 1.0 / 3 吗? 我得到的答案绰绰有余 【参考方案1】:

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

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

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

【讨论】:

如果你想要一个小数结果,你也可以将它们转换为小数。 选择 1.0*MyInt1/MyInt2 @TroubleZero 供 mysql 使用 decimal 非常感谢,您拯救了我的一天。我尝试了 CAST(7/3 AS float) 但再次返回 2。所以演员阵容解决了我的问题。 不需要同时使用除数和除数,参见@M.S.'回答***.com/a/30639343/2866644【参考方案2】:

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

select 1 * 1.0 / 3

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

select x * 1.0 / y

【讨论】:

你甚至可以省略零。【参考方案3】:

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

SELECT CAST(1 AS float) / 3

SELECT 1 / CAST(3 AS float)

【讨论】:

【参考方案4】:

使用

select 1/3.0

这样就可以了。

【讨论】:

【参考方案5】:

我了解在 MySQL 中不允许使用 CASTing 到 FLOAT,并且当您尝试 CAST(1 AS float) 时会引发错误,如 MySQL dev 所述。

解决方法很简单。做吧

(1 + 0.0)

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

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

上面的 SQL 将 1 除以 2 并返回一个浮点数到小数点后 3 位,如0.500

可以CAST 为以下类型:binary、char、date、datetime、decimal、json、nchar、signed、time,unsigned

【讨论】:

MySQL 确实允许CAST,只是不允许转换为FLOAT。改为DECIMAL。参见例如***.com/questions/7368163/….【参考方案6】:

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

SELECT 1.0*MyInt1/MyInt2

或者:

SELECT (1.0*MyInt1)/MyInt2

【讨论】:

我最喜欢这个,它甚至看起来很适合百分比计算:SELECT 100.0 * @Elapsed / @Total【参考方案7】:

使用这个

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

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

【讨论】:

【参考方案8】:

如果你(和我一样)来这里是为了寻找整数值的解决方案,答案如下:

CAST(9/2 AS UNSIGNED)

返回 5

【讨论】:

以上是关于如何通过使用 T-SQL 将两个整数值相除来获得浮点结果?的主要内容,如果未能解决你的问题,请参考以下文章

Groovy入门经典 随书重点

如何从不同的表中减去两个整数值

js中如何判断两个浮点数是不是相等

VBS脚本编程——运算符

编写一个ARM汇编语言程序来执行浮点数的乘法

用辗转相除法求2个数的最大公约数,怎么做?