为什么 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 中,结果的小数精度和小数位数取决于操作数的精度和小数位数
"结果精度和小数位数的绝对最大值为38。当结果精度大于38时,将其减少到38,并减少相应的小数位数,以尽量防止结果的整数部分被截断. 在某些情况下,例如乘法或除法,比例因子不会减少以保持小数精度,但会引发溢出错误。"
关于sql-server - SQL 除法精度/损失 float x decimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50537018/