【发布时间】:2009-09-21 16:54:29
【问题描述】:
在 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 中,什么是在不损失精度的情况下划分小数的正确方法。
【问题讨论】:
-
好问题。更奇怪的是,将声明更改为 (38 ,10) 实际上会使它更糟,而实际上将它们更改为 (20,10)似乎修复它。没有意义...
标签: sql sql-server tsql