powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблема с делением/умножением типов Decimal в DB2
13 сообщений из 13, страница 1 из 1
Проблема с делением/умножением типов Decimal в DB2
    #37347433
K.T.V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Не понимаю, что происходит с числами типа Decimal при их делении и умножении в DB2.
К примеру, если взять функцию
CREATE FUNCTION MY_FUNC_FOR_TEST (PARAM1 DECIMAL(19,4),
PARAM2 DECIMAL(19,4))
RETURNS DECIMAL(19,4)
BEGIN
RETURN PARAM1*PARAM2;
END

и вызвать ее с произвольными дробными числами, то результат будет ужасающе далек от реального. А вот если выполнять не просто умножение, а указывать точность для каждого параметра, причем со scale=8:
RETURN DEC(DEC(PARAM1,19,8)*DEC(PARAM2,19,8),19,4);
то все получается просто отлично.
Почему на ДБ2 оно работает именно так?
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347518
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия?
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347520
Dr. Blez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
db2 10 for z/os
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347793
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искажение в положении десятичной точки в результате?
Т.е. вместо 123,45 например что-то типа 12,345
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347849
Dr. Blez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
CREATE PROCEDURE TEST.TSTDEC(IN V1 DECIMAL( 19 , 4 ), IN V2 DECIMAL( 19 , 4 ), OUT R DECIMAL( 19 , 4 ))
P1: BEGIN 
 SET R = V1 * V2;
END P1
получается:

v1=19.4122
v2=22.5123
r=427.0684
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347851
Dr. Blez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а должно быть 437,0133
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347971
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используйте DECFLOAT
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37347996
K.T.V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, большое спасибо! Умные люди уже даже скинули ссылку на статью, где говорится, что в ДБ2 можно использовать этот тип для финансовых вычислений :) http://www.ibm.com/developerworks/data/library/techarticle/dm-0801chainani/
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37348971
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще странно, а почему обычный децимал не работает правильно?
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37349092
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v1=19.4122
v2=22.5123

r=427.0684 - это результат умножения 19.4122 на 22, т.е. похоже от множителя только целая часть берется.
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37349300
K.T.V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так вот непонятно, почему оно так работает! Может быть, что-то не то с настройками самого сервера? Сейчас специалисты будут переписываться с IBM'овцами, выяснять...
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37349550
K.T.V.,

Исполнение умножения в таком виде должно давать SQLWARN7 (Conversion of decimal number from precision 31 to precision 15 caused truncation of fractional digits.)
Почему так происходит описано в документации: Decimal multiplication
Т.е. умножение работает "AS DESIGNED" но неочевидным образом.
Варианты решения:
1. Уменьшить заданную разрядность одного из операндов с 19,4 до 15,4
2. Применить функцию MULTIPLY_ALT. Внимательно смотреть как работает.
3. Использовать DECFLOAT, о чем уже сказано.
...
Рейтинг: 0 / 0
Проблема с делением/умножением типов Decimal в DB2
    #37353065
K.T.V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, тогда понятно. Спасибо!
Вариант 15,4 уже предлагался - решили, что для наших условий слишком мало.
функцию посмотрю.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблема с делением/умножением типов Decimal в DB2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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