Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 странный еррор переполнения %-/  [new]
Msg 8115
Guest
Всем доброго времени суток.

Кто-нибудь может проделать вот это ?

select 946269873556671898010095365903670/2

У меня, как не пытаюсь, всё время валится на
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type numeric.

(хотя деление на 22 проходит уже Ок). Странно всё это: до лимита в 10e+38 еще очень далеко, а вылезает ошибка, явно связанная с переполнением по арифметике.

Куда копать ?
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 5.0
12 дек 09, 02:49    [8057939]     Ответить | Цитировать Сообщить модератору
 Re: странный еррор переполнения %-/  [new]
ё
Guest
Msg 8115
...
Куда копать ?

можна сюда
select CAST(946269873556671898010095365903670 As float)/2
12 дек 09, 04:03    [8057952]     Ответить | Цитировать Сообщить модератору
 Re: странный еррор переполнения %-/  [new]
Msg 8115
Guest
ё,

теряется точность, выдаёт: 4,73134936778336E+32
если дальше кастить его к num(38), то: 473134936778335920000000000000000
12 дек 09, 10:03    [8058044]     Ответить | Цитировать Сообщить модератору
 Re: странный еррор переполнения %-/  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
Msg 8115
ё,

теряется точность, выдаёт: 4,73134936778336E+32
если дальше кастить его к num(38), то: 473134936778335920000000000000000


Там у них с делением того, не очень :-(

Вот так можно:
select CAST(946269873556671898010095365903670 As decimal(38))
* CAST(0.5 As decimal(38))
А так нельзя:
select CAST(946269873556671898010095365903670 As decimal(38))
/CAST(2 As decimal(38))
12 дек 09, 17:05    [8058495]     Ответить | Цитировать Сообщить модератору
 Re: странный еррор переполнения %-/  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
Msg 8115
ё,

теряется точность, выдаёт: 4,73134936778336E+32
если дальше кастить его к num(38), то: 473134936778335920000000000000000


Там у них с делением того, не очень :-(

Вот так можно:
select CAST(946269873556671898010095365903670 As decimal(38))
* CAST(0.5 As decimal(38))
А так нельзя:
select CAST(946269873556671898010095365903670 As decimal(38))
/CAST(2 As decimal(38))
Посмотрите Точность, масштаб и длина (Transact-SQL)
12 дек 09, 17:09    [8058502]     Ответить | Цитировать Сообщить модератору
 Re: странный еррор переполнения %-/  [new]
aleks2
Guest
Msg 8115
Всем доброго времени суток.

Кто-нибудь может проделать вот это ?

select 946269873556671898010095365903670/2


Я могу - я учил арифметику в школе.

--select 946269873556671898010095365903670/2

--select 94626987355667189*1000000000000000/2 + 8010095365903670/2

select 94626987355667189*500000000000000 + 8010095365903670/2

За абсолютную точность не ручаюсь - мог просчитаться в нулях - но идея, надеюсь, понятна.
12 дек 09, 18:18    [8058568]     Ответить | Цитировать Сообщить модератору
 Re: странный еррор переполнения %-/  [new]
Msg 8115
Guest
aleks2,

да, всё понятно. Спасибо! :-)
12 дек 09, 21:07    [8058732]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить