Несовпадение SQL Multiply - PullRequest
       1

Несовпадение SQL Multiply

4 голосов
/ 10 января 2010

Я наткнулся на эту странность при умножении чисел DECIMAL на SQL Server 2005/2008. Кто-нибудь может объяснить эффект?

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

1 Ответ

2 голосов
/ 10 января 2010

Это связано с точностью представления и ошибками округления.

Проблема связана с

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

[Пожалуйста, найдите несколько примеров в SO.]

Похожие: Десятичный знак сервера SQL (30,10) теряет последние 2 десятичных знака

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...