powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / IDS 9.4 UС7 Загадочный CAST
2 сообщений из 2, страница 1 из 1
IDS 9.4 UС7 Загадочный CAST
    #33589768
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно обнаружили загадочное (пока, надеюсь :) ) поведение IDS 9.4 UС7 при приведении типов. ХП результатов изысканий в студии:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE PROCEDURE "informix".str_test(
  p_num DECIMAL,                -- число для конвертирования
  p_decp INTEGER DEFAULT  0       -- количество символов для десятичных  разрядов
) RETURNING 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 );

  DEFINE nChar1, nChar2, nChar3, nChar4, nChar5, nChar6 VARCHAR( 19 ); 

  LET nChar1 = ROUND(p_Num, p_DecP);
  LET nChar2 = '' || ROUND(p_Num, p_DecP);
  LET nChar3 = p_Num;
  LET nChar4 = '' || p_Num;
  LET nChar5 = CAST(ROUND(p_Num, p_DecP) AS VARCHAR( 19 ));
  LET nChar6 = CAST( 0  + ROUND(p_Num, p_DecP) AS VARCHAR( 19 ));

  RETURN nChar1, nChar2, nChar3, nChar4, nChar5, nChar6;

END PROCEDURE;

execute procedure str_test( 5 . 4 ,  2 );


Результат:

5.4000000000000000 5.40 5.4000000000000000 5.4000000000000000 5.40 5.4000000000000000

Совершенно не вижу логики в отличии поведения для nChar1 и nChar2, а также для nChar1 и nChar5. Хотя сами пока остановились на варианте для nChar5.
Может кому-то пригодится :)
...
Рейтинг: 0 / 0
IDS 9.4 UС7 Загадочный CAST
    #33589797
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так даже интереснее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE PROCEDURE "informix".str_test(
  p_num DEC( 19 , 5 ),                -- число для конвертирования
  p_decp INTEGER DEFAULT  0       -- количество символов для десятичных  разрядов
) RETURNING 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 ), 
  VARCHAR( 19 );

  DEFINE nChar1, nChar2, nChar3, nChar4, nChar5, nChar6 VARCHAR( 19 ); 

  LET nChar1 = ROUND(p_Num, p_DecP);
  LET nChar2 = '' || ROUND(p_Num, p_DecP);    --
  LET nChar3 = p_Num;
  LET nChar4 = '' || p_Num;
  LET nChar5 = CAST(ROUND(p_Num, p_DecP) AS VARCHAR( 19 )); --
  LET nChar6 = CAST( 0  + ROUND(p_Num, p_DecP) AS VARCHAR( 19 ));

  RETURN nChar1, nChar2, nChar3, nChar4, nChar5, nChar6;

END PROCEDURE;

execute procedure str_test( 5 . 4 ,  2 );


Результат:

5.4000000000000000 5.40 5.40000 5.40000 5.40 5.4000000000000000
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / IDS 9.4 UС7 Загадочный CAST
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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