当在Sql Server 05中划分2个十进制(30,10)数字时,2个最后的小数似乎丢失(甚至没有舍入,只是截断).
例如:
Declare @x decimal(30,10) Declare @y decimal(30,10) Declare @z decimal(30,10) select @x = 2.1277164747 select @y = 4.8553794574 Select @z = @y/@x select @z
结果:2.2819673100
但是,如果将2个被分割的数字转换为浮点数似乎有效:
.... Select @z = cast(@y as float)/cast(@x as float) select @z
结果:2.2819673181
为什么Sql这样做?什么是在不失去Sql精度的情况下划分小数的正确方法.
解决方法
SQL Server中允许的最大精度为38.您使用的是十进制(30,10).最大值为99,999,999.9999999999如果将此数字除以0.000000001,最终会得到一个更大的数字,因此生成的数据类型必须能够容纳它.这会导致您失去一些精确度.
将原始数据类型更改为十进制(20,10),并且不会出现此问题.
有关数据类型的完整规则(以及它们如何受数学运算影响):
Full rules here