Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Загадка... / 15 сообщений из 15, страница 1 из 1
11.07.2017, 15:27
    #39486629
/0
/0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
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
...
Рейтинг: 0 / 0
11.07.2017, 15:33
    #39486636
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
/0IBExpert 2014.10.11.1
Какой год на дворе?
...
Рейтинг: 0 / 0
11.07.2017, 15:33
    #39486638
/0
/0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
Выводит 0,61999 и 0.62
...
Рейтинг: 0 / 0
11.07.2017, 15:50
    #39486677
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
Загадка тут одна - как можно до сих пор не понимать двоичные числа с плавающей точкой
...
Рейтинг: 0 / 0
11.07.2017, 16:04
    #39486712
rstrelba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
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
...
Рейтинг: 0 / 0
11.07.2017, 16:05
    #39486714
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
сдается мне раунд из какой-нибудь древнючей УДФ, в итоге результат такого округления принудительный дабл.
решение - выпилить удф-ный раунд. Оно поди еще и null к нолику приводит.
...
Рейтинг: 0 / 0
11.07.2017, 16:27
    #39486747
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
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


хотя все равно как-то странно.
...
Рейтинг: 0 / 0
11.07.2017, 16:32
    #39486757
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
rstrelba,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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
...
Рейтинг: 0 / 0
11.07.2017, 16:55
    #39486784
/0
/0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
Никакие UDF не используются - родной round из комплекта сервера.
По поводу "двоичные числа с плавающей точкой " отчасти согласен, НО
это злополучное число получается как сумма некоторых значений из столбца таблицы,
имеющего формат NUMERIC(12,2). Можно прокастовать 623.20 к этому типу - такая же ситуация.
И если это действительно была ошибка округления ввиду ряда причин - почему при касте в строку
получилось то, что и должно быть, а не '0.61999'?
Конечно можно кастовать в строку, а потом обратно - но это не спортивно как то...
...
Рейтинг: 0 / 0
11.07.2017, 17:07
    #39486795
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
Такое впечатление, что это эксперт с его датасетом и AsFloat портит картину. В эксперте (у меня 17 года) картинка странная.

Влад,
в доке
https://firebirdsql.org/refdocs/langrefupd21-intfunc-round.html
нет нумерика как результат, это в доке кривовато написано?
...
Рейтинг: 0 / 0
11.07.2017, 17:09
    #39486799
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
/0,

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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
...
Рейтинг: 0 / 0
11.07.2017, 17:10
    #39486801
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
/0...почему при касте в строку получилось то, что и должно быть...
Ну может потому что сервер (а не кто-то другой) в строку переводит

ведь вот здесь 20634261 Влад показал что выдает сервер
однако у тебя вопросы не исчезли
...
Рейтинг: 0 / 0
11.07.2017, 17:12
    #39486806
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
Ivan_PisarevskyВлад,
в доке
https://firebirdsql.org/refdocs/langrefupd21-intfunc-round.html
нет нумерика как результат, это в доке кривовато написано?(scaled) BIGINT - не оно ?
...
Рейтинг: 0 / 0
11.07.2017, 17:14
    #39486808
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
по идее да, да и по наблюдению оно. Перекину-ка я топик в соседний раздел, пусть Хвастунов про свое детище расскажет.

Модератор: Тема перенесена из форума "Firebird, InterBase".
...
Рейтинг: 0 / 0
11.07.2017, 17:33
    #39486824
/0
/0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадка...
Всем спасибо! Я получил ответ на вопрос.
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Загадка... / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]