db2十进制打印零而不是四舍五入到小数位

时间:2018-10-04 21:27:36

标签: sql db2 decimal

我正在基于DB2中的计数选择一个除法,并将其放入小数列。问题是,它以小数形式插入,但它是0.00而不是0.74

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

在这种情况下,计数为242,所以我期望为0.74,但是所有内容都舍入为零。

我不确定在DB2上最好的分辨率是多少?

3 个答案:

答案 0 :(得分:1)

尝试使用小数点进行除法:

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

documentation中所述:

  
      
  • 具有两个整数操作数的算术
  •   
     

如果算术运算符的两个操作数均为整数,则该操作将以二进制形式执行。除非一个(或两个)操作数都是大整数,否则结果是一个大整数。在这种情况下,结果是一个大整数。

因此0出现在转换之前。

答案 1 :(得分:0)

还要注意,CAST运算不会四舍五入,只会被截断。例如除非您也使用ROUND,否则180.0 / 241将为0.74

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.

答案 2 :(得分:0)

DB2 for Linux, Unix and Windows: Expressions

请参见“ 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