Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
12.07.2011, 10:53
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Доброго времени суток! Не понимаю, что происходит с числами типа 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 оно работает именно так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 11:24
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Версия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 11:25
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
db2 10 for z/os ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 13:31
|
|||
|---|---|---|---|
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Искажение в положении десятичной точки в результате? Т.е. вместо 123,45 например что-то типа 12,345 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 13:58
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. v1=19.4122 v2=22.5123 r=427.0684 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 13:59
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
а должно быть 437,0133 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 14:39
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Используйте DECFLOAT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2011, 14:48
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Да, большое спасибо! Умные люди уже даже скинули ссылку на статью, где говорится, что в ДБ2 можно использовать этот тип для финансовых вычислений :) http://www.ibm.com/developerworks/data/library/techarticle/dm-0801chainani/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2011, 00:23
|
|||
|---|---|---|---|
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
вообще странно, а почему обычный децимал не работает правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2011, 08:23
|
|||
|---|---|---|---|
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
v1=19.4122 v2=22.5123 r=427.0684 - это результат умножения 19.4122 на 22, т.е. похоже от множителя только целая часть берется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2011, 10:48
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
Так вот непонятно, почему оно так работает! Может быть, что-то не то с настройками самого сервера? Сейчас специалисты будут переписываться с IBM'овцами, выяснять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2011, 12:52
|
|||
|---|---|---|---|
|
|||
Проблема с делением/умножением типов Decimal в DB2 |
|||
|
#18+
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, о чем уже сказано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=43&tablet=1&tid=1602191]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 193ms |

| 0 / 0 |
