【发布时间】:2014-09-24 17:54:52
【问题描述】:
declare @nr1 decimal(20,19),
@nr2 decimal(20,19)
set @nr1 = EXP(1.0)
set @nr2 = PI();
print @nr1/@nr2
由于 EXP 和 PI 是“无限”数字,因此您应该始终有足够的小数来打印
这个查询的结果是0.865255979432265082
对于查询:
declare @nr12 decimal(34,25),
@nr22 decimal(34,25)
set @nr12 = EXP(1.0)
set @nr22 = PI();
print @nr12/@nr22
我得到了结果:0.865255
所以我的问题是,为什么第一个查询比第二个查询更精确?正如在 msdn 中定义的 decimal(p,s) 告诉我第二个查询应该更精确。
【问题讨论】:
-
可能是从点的右侧到点的左侧减去小数点(10,5),例如 10 - 5 @ciucas
-
如果您在除法之前选择变量...您可以看到后者确实具有更大的比例/精度(尽管没有完全填充),它是截断结果的除法运算。
-
恰恰相反,@mohan111。 Decimal(p,s) 定义为精度和比例,其中精度是存储的最大总位数,比例是可以表示的小数点右侧的最大位数,最大为 p。
-
@CiucaS,如果您将精度设置为 38 会发生什么?您已经 34 岁了,所以您已经使用 17 个字节来存储它。 38 不使用任何额外的,每个 msdn.microsoft.com/en-us/library/ms187746.aspx
-
是的,我同意你的看法@dodexahedron
标签: sql sql-server decimal