sql-server - SQL 除法精度/损失 float x decimal

标签 sql-server sql-server-2008-r2

为什么 SQL Server 会失去小数除法的精度?

抱歉格式不对,我是用手机发的...

declare @base decimal(38,10) = -3062.325,
        @div decimal(38,10) = 25812561468.9017,
        @mult decimal(38,10) = 103177265901.524

select @base / @div * @mult

结果:0

declare @base decimal(28,10) = -3062.325,
        @div decimal(28,10) = 25812561468.9017,
        @mult decimal(28,10) = 103177265901.524

select @base / @div * @mult

结果:-12236.823736

declare @base float = -3062.325,
        @div float = 25812561468.9017,
        @mult float = 103177265901.524

select @base / @div * @mult

结果:-12240.6418744047

最奇怪的是 float 返回与 Excel 和 Wolfram alpha 相同的结果 ...

Excel 结果:-12240.64187

最佳答案

在 SQL Server 中,结果的小数精度和小数位数取决于操作数的精度和小数位数

enter image description here

"结果精度和小数位数的绝对最大值为38。当结果精度大于38时,将其减少到38,并减少相应的小数位数,以尽量防止结果的整数部分被截断. 在某些情况下,例如乘法或除法,比例因子不会减少以保持小数精度,但会引发溢出错误。"

参见 Precision, scale, and Length

关于sql-server - SQL 除法精度/损失 float x decimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50537018/

相关文章:

sql-server - Select 可以阻止插入表吗?

sql - 消息102,级别15,状态1,过程CaDataGroup_Insert,第88行 '='附近的语法不正确

triggers - SQL Server 触发器不插入行

sql - 如何为 SQL 中的列组合提供唯一约束,而不考虑 Order

sql-server - JTDS 驱动程序不适用于 Sql Server 2008R2,且 Denali Native SSPI 库未加载。检查 java.library.path 系统属性

sql-server - 将Azure V12数据库导入本地SQL 2012

SQL ORDER BY - 将具有相同值的列分组

sql-server - 比较其他两个表的结果集时出现 SQL Server : Iterate over rows of one table,

sql-server - 改进报告存储过程执行时间 - 调整临时表?

sql-server - 使用SQL编辑XML列。不那么结构化的XML