为什么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
答案 0 :(得分:1)
在SQL Server中,小数精度和结果的比例取决于操作数的精度和规模
“结果精度和比例的绝对最大值为38.当结果精度大于38时,它减少到38,并减小相应的比例以试图防止结果的整数部分被截断在某些情况下,例如乘法或除法,虽然可以提高溢出误差,但为了保持小数精度,比例因子不会降低。“