SQL除法精度/损失浮点数x十进制

时间:2018-05-25 21:24:29

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

为什么SQL Server在十进制除法时会失去精度?

对于这种格式感到抱歉,我是通过手机发布的......

0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00written string1written string2 0\00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00writtenstring 3 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00

结果:0

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

select @base / @div * @mult

结果:-12236.823736

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

select @base / @div * @mult

结果:-12240.6418744047

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

Excel结果:-12240.64187

1 个答案:

答案 0 :(得分:1)

在SQL Server中,小数精度和结果的比例取决于操作数的精度和规模

enter image description here

“结果精度和比例的绝对最大值为38.当结果精度大于38时,它减少到38,并减小相应的比例以试图防止结果的整数部分被截断在某些情况下,例如乘法或除法,虽然可以提高溢出误差,但为了保持小数精度,比例因子不会降低。“

请参阅Precision, scale, and Length