Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 ошибка хранения double precision  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 379
всем привет.

использую ФБ2.5
каким-то образом в базе оказалось вот такое значение:

автор
SCLAD_TIME SCLAD_IN CASTVARCHAR20
19.03.2018 19:20:49 10 10.00000000000000
03.08.2018 16:18:54 20 20.00000000000000
03.08.2018 16:45:27 5 5.000000000000000
17.09.2018 9:45:26 3 3.000000000000000
21.05.2019 20:11:45 6.66666666666667E28 6.666666666666667e+028
13.06.2019 9:54:04 1 1.000000000000000
13.06.2019 11:13:36 1 1.000000000000000


round с таким не работает дает ошибку, cast только в varchar
хотелось бы разом как-то поправить эти строки
приходит на ум только переводить в строку, обрезать после точки, и потом опять в дабл

что еще присоветуете для коррекции таких случаев?
26 сен 19, 09:07    [21979433]     Ответить | Цитировать Сообщить модератору
 Re: ошибка хранения double precision  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 379
вот так поприличнее выглядит

SCLAD_TIME		SCLAD_IN		CASTVARCHAR20
19.03.2018 19:20:49	10			10.00000000000000
03.08.2018 16:18:54	20			20.00000000000000
03.08.2018 16:45:27	5			5.000000000000000
17.09.2018 9:45:26	3			3.000000000000000
21.05.2019 20:11:45	6.66666666666667E28	6.666666666666667e+028
13.06.2019 9:54:04	1			1.000000000000000
13.06.2019 11:13:36	1			1.000000000000000
26 сен 19, 09:10    [21979436]     Ответить | Цитировать Сообщить модератору
 Re: ошибка хранения double precision  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10095
genok,

а с чего ты решил что это ошибка хранения? Для double такие числа в порядке вещей. Где-нибудь вылезло в результате которые не округлили
26 сен 19, 09:26    [21979450]     Ответить | Цитировать Сообщить модератору
 Re: ошибка хранения double precision  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
genok, перестаёт работать уже на 20 знаках до десятичной точки (6.666666666666667e+19). У тебя на складе в самом деле количество товара исчисляется числом с 28-ью разрядами до десятичной точки? Даже если ты округлишь это число до 6.6667E28, многие функции с ним всё равно не смогут работать.
SELECT Round((6.666666666666667e+28)*1.0e-24)*1.0e+24 FROM oneRow
26 сен 19, 09:32    [21979458]     Ответить | Цитировать Сообщить модератору
 Re: ошибка хранения double precision  [new]
Cobalt747
Member

Откуда:
Сообщений: 2128
genok,

Почему же ошибка?
Как передали, так СУБД и хранит
26 сен 19, 11:05    [21979550]     Ответить | Цитировать Сообщить модератору
 Re: ошибка хранения double precision  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 379
задам еще раз вопрос, вдруг не увидели

автор
хотелось бы разом как-то поправить эти строки
приходит на ум только переводить в строку, обрезать после точки, и потом опять в дабл

что еще присоветуете для коррекции таких случаев?


про то что я неправильно ему назвал, уже понял, спасибо, больше про это писать не нужно.
15 окт 19, 04:59    [21994233]     Ответить | Цитировать Сообщить модератору
 Re: ошибка хранения double precision  [new]
pastor
Member

Откуда: Калуга
Сообщений: 1049
genok
задам еще раз вопрос, вдруг не увидели

автор
хотелось бы разом как-то поправить эти строки
приходит на ум только переводить в строку, обрезать после точки, и потом опять в дабл

что еще присоветуете для коррекции таких случаев?


про то что я неправильно ему назвал, уже понял, спасибо, больше про это писать не нужно.


просто сравнить?

round -> int64

update my_table set
 my_field = -1
where my_filed >= 9223372036854775807 /*MaxInt64*/
15 окт 19, 08:21    [21994253]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить