SQL-сервер странный математический результат? - PullRequest
2 голосов
/ 02 апреля 2012

Я думаю, что я схожу с ума

SELECT 30.0/(-2.0)/5.0;
SELECT 30.0/-2.0/5.0;

enter image description here

что здесь происходит?

edit

кто сказал, что x/(y)/zбудет (x/y)/z а не x(y/z)?-

Ответы [ 2 ]

7 голосов
/ 02 апреля 2012

SELECT 30.0/(-2.0)/5.0; довольно ясно:

SELECT 30.0/(-2.0)=-15.0
-15.0/5.0=-3.0

второй выбор интерпретируется как: SELECT 30.0/-(2.0/5.0);

2.0/5.0=0.4
30.0/-0.4=-75.0

см .: Приоритет оператора (Transact-SQL)

3 голосов
/ 02 апреля 2012

Ваш второй выбор выполняется как:

select 30.0/-(2.0/5.0)

Похоже, что знак минус заставляет SQL Server инвертировать последнее деление - почти наверняка это ошибка!

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