我正在基于DB2中的计数选择一个除法,并将其放入小数列。问题是,它以小数形式插入,但它是0.00而不是0.74
select
CAST(180/count(*) as DECIMAL(5,2))
from table;
在这种情况下,计数为242,所以我期望为0.74,但是所有内容都舍入为零。
我不确定在DB2上最好的分辨率是多少?
答案 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