Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
 Загадка...  [new]
/0
Guest
select TMP,
cast(TMP as varchar(10)) from
(select round(0.001*623.20,2) as TMP from rdb$database)

вы видите тоже, что и я?
это глюк IBExpert или все таки FB?

FB 2.5.1
IBExpert 2014.10.11.1
11 июл 17, 15:27    [20633870]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 22954
/0
IBExpert 2014.10.11.1

Какой год на дворе?
11 июл 17, 15:33    [20633919]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
/0
Guest
Выводит 0,61999 и 0.62
11 июл 17, 15:33    [20633929]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
hvlad
Member

Откуда:
Сообщений: 9233
Загадка тут одна - как можно до сих пор не понимать двоичные числа с плавающей точкой
11 июл 17, 15:50    [20634063]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
rstrelba
Member

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

явно же глюк

select round(0.001*623.20,3) as TMP from rdb$database
0.62299

select round(0.001*623.20,4) as TMP from rdb$database
0.6232
11 июл 17, 16:04    [20634134]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7677
сдается мне раунд из какой-нибудь древнючей УДФ, в итоге результат такого округления принудительный дабл.
решение - выпилить удф-ный раунд. Оно поди еще и null к нолику приводит.
11 июл 17, 16:05    [20634137]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7677
Result type: INTEGER, (scaled) BIGINT or DOUBLE
нумерика нет среди результата.

select 0.001*623.20,
round(0.001*623.20,1) as f1,
round(0.001*623.20,2) as f2,
round(0.001*623.20,3) as f3,
round(cast(0.001 * 623.20 as numeric (18,5)),3) as fn3,
round(0.001*623.20,4) as f4,
round(0.001*623.20,5) as f5,


round(0.6232,2),
round(0.6232,3)
from rdb$database


хотя все равно как-то странно.
11 июл 17, 16:27    [20634237]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
hvlad
Member

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

firebird>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> set sql dialect 1;
SQL> create database 's:\temp\1.fdb';
SQL>
SQL> select round(0.001*623.20,3) as TMP from rdb$database;

TMP
=======================
0.6230000000000000

SQL> select round(0.001*623.20,4) as TMP from rdb$database;

TMP
=======================
0.6232000000000000
11 июл 17, 16:32    [20634261]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
/0
Guest
Никакие UDF не используются - родной round из комплекта сервера.
По поводу "двоичные числа с плавающей точкой " отчасти согласен, НО
это злополучное число получается как сумма некоторых значений из столбца таблицы,
имеющего формат NUMERIC(12,2). Можно прокастовать 623.20 к этому типу - такая же ситуация.
И если это действительно была ошибка округления ввиду ряда причин - почему при касте в строку
получилось то, что и должно быть, а не '0.61999'?
Конечно можно кастовать в строку, а потом обратно - но это не спортивно как то...
11 июл 17, 16:55    [20634340]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7677
Такое впечатление, что это эксперт с его датасетом и AsFloat портит картину. В эксперте (у меня 17 года) картинка странная.

Влад,
в доке
https://firebirdsql.org/refdocs/langrefupd21-intfunc-round.html
нет нумерика как результат, это в доке кривовато написано?
11 июл 17, 17:07    [20634361]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
hvlad
Member

Откуда:
Сообщений: 9233
/0,

родной round я выше показывал. Вот ещё раз:

SQL> set sql dialect 1;
SQL> create database 's:\temp\1.fdb';
SQL> select TMP,
CON> cast(TMP as varchar(10)) from
CON> (select round(0.001*623.20,2) as TMP from rdb$database);

TMP CAST
======================= ==========
0.6200000000000000 0.62
11 июл 17, 17:09    [20634369]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1199
/0
...почему при касте в строку получилось то, что и должно быть...

Ну может потому что сервер (а не кто-то другой) в строку переводит

ведь вот здесь 20634261 Влад показал что выдает сервер
однако у тебя вопросы не исчезли
11 июл 17, 17:10    [20634371]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
hvlad
Member

Откуда:
Сообщений: 9233
Ivan_Pisarevsky
Влад,
в доке
https://firebirdsql.org/refdocs/langrefupd21-intfunc-round.html
нет нумерика как результат, это в доке кривовато написано?
(scaled) BIGINT - не оно ?
11 июл 17, 17:12    [20634379]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 7677
по идее да, да и по наблюдению оно. Перекину-ка я топик в соседний раздел, пусть Хвастунов про свое детище расскажет.

Модератор: Тема перенесена из форума "Firebird, InterBase".
11 июл 17, 17:14    [20634383]     Ответить | Цитировать Сообщить модератору
 Re: Загадка...  [new]
/0
Guest
Всем спасибо! Я получил ответ на вопрос.
11 июл 17, 17:33    [20634422]     Ответить | Цитировать Сообщить модератору
Все форумы / IBExpert Ответить