Db2 десятичный выводит ноль вместо округления до десятичного знака - PullRequest
0 голосов
/ 05 октября 2018

Я выбираю деление на основе подсчета в DB2, и оно входит в десятичный столбец.Проблема в том, что он вставляется в виде десятичной дроби, но он равен 0,00 вместо 0,74

select 
    CAST(180/count(*) as DECIMAL(5,2))
   from table;

. В этом случае число равно 242, поэтому я ожидаю 0,74, но все просто округляется до нуля.

Iя не уверен, что конкретно в DB2 какое лучшее разрешение будет здесь?

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Также обратите внимание, что CAST ing не округляется, он просто усекается.например, 180,0 / 241 будет 0,74, если вы не используете ROUND, а также

db2 values "(180/241, 180.0/241 , cast (180.0/241 as decimal(3,2)), round(180.0/241,2), decimal(round(180.0/241,2),3,2))"

1           2                                 3     4                                 5    
----------- --------------------------------- ----- --------------------------------- -----
          0    0.7468879668049792531120331950  0.74    0.7500000000000000000000000000  0.75

  1 record(s) selected.
0 голосов
/ 05 октября 2018

DB2 для Linux, Unix и Windows: выражения

См. Раздел «Десятичная арифметика в SQL».Шкала по умолчанию рассчитывается как: 31-p + s-s '

db2 describe values (dec(180, 29)/242, dec(dec(180, 29)/242, 5, 2))

 Column Information

 Number of columns: 2

 SQL type              Type length
 --------------------  -----------
 484   DECIMAL               31, 2
 484   DECIMAL                5, 2


db2 values (dec(180, 29)/242, dec(dec(180, 29)/242, 5, 2))

1                                 2
--------------------------------- -------
                             0,74    0,74
0 голосов
/ 05 октября 2018

Попробуйте использовать десятичную точку для деления:

select CAST(180.0/count(*) as DECIMAL(5,2))
from table;

Как описано в документации :

  • Арифметика с двумя целочисленными операндами

Если оба операнда арифметического оператора являются целыми числами, операция выполняется в двоичном формате.Результатом является большое целое число, если ни один (или оба) операнда не является большим целым числом, в этом случае результатом является большое целое число.

Таким образом, 0 появляется перед преобразованием.

...