tsql – SQL乘法差异

在SQL Server 2005/2008上乘以DECIMAL数字时,我偶然发现了这种奇怪的现象.谁能解释一下效果呢?

DECLARE @a DECIMAL(38,20)
DECLARE @b DECIMAL(38,20)
DECLARE @c DECIMAL(38,20)

SELECT  @a=1.0,
        @b=2345.123456789012345678,
        @c=23456789012345.999999999999999999

SELECT CASE WHEN @a*@b*@c = @c*@b*@a
       THEN 'Product is the same'
       ELSE 'Product differs'
       END

最佳答案 这是由于精确表示和舍入误差.

问题是由于

SELECT @a*@b   --(=2345.123457)

[请搜索SO以获取多个示例.]

相关:Sql Server Decimal(30,10) losing last 2 decimals

点赞