DB2之DECIMAL小数位数导致的乘法溢出
来源:互联网 发布:胜利足球数据库 编辑:程序博客网 时间:2024/05/01 18:16
DECIMAL值类型最长为31位,它在做乘法运算的时候,会将小数位数自动加和而挤占整数位,直到挤占完毕导致结果溢出。
比如A:DECIMAL(24,6) ;B:DECIMAL(24,6);则A*B的结果是DECIMAL(31,12)
比如A:DECIMAL(5,2) ;B:DECIMAL(6,3);则A*B的结果是DECIMAL(11,5)
依次类推,如果有5个DECIMAL(24,6)乘数相乘,乘法的结果为30位小数,如果此时再继续乘以某个数值使其结果大于1,DB2将挤占直到31位小数DB2 也将报错:
SELECT 1.1*CAST(1 AS DECIMAL(24,6))*CAST(1 AS DECIMAL(24,6))*CAST(1 AS DECIMAL(24,6))*CAST(1 AS DECIMAL(24,6))*CAST(1 AS DECIMAL(24,6)) FROM BUSINESS_CONTRACT FETCH FIRST 1 ROWS ONLY
SQLSTATE 22003: A numeric value is out of range.
SQL0802N 发生算术溢出或其他算术异常。 SQLSTATE=22003
不信各位可以试试。
解决的办法是,在每一次乘法计算完毕后,都对计算结果进行一下 CAST()修正,
如:CAST(6.02*3.36 AS DECIMAL(24,2))
- DB2之DECIMAL小数位数导致的乘法溢出
- 17 如何取decimal的小数位数
- C# decimal保留指定的小数位数,不四舍五入
- DB2的DECIMAL类型
- DB2的DECIMAL类型
- DB2的DECIMAL类型
- Decimal模块:小数的处理
- 俩位数的乘法
- 控制DOUBLE,DECIMAL小数点的位数
- 控制小数显示的位数
- 设置输出小数的位数
- 几位数乘法的结构
- C#中如何为参数SqlDbType.Decimal指定精度与小数位数
- decimal(小数) module
- 分数化小数decimal
- 分数化小数(decimal)
- JavaScript 获取小数任一小数点后的位数的小数
- 保留小数位数的函数--js
- 目前比较流行的二维码的生成
- NAT应用场景
- ccs3.3调试烧写时各种报错解决方法
- DIY Mobile Phone
- delphi的消息机制实现消息传递字符串
- DB2之DECIMAL小数位数导致的乘法溢出
- 利用函数指针实现高内聚、低耦合
- Linux技巧之Ubuntu11.04下安装极点五笔输入法
- db2 安装 fix pack
- Struts的FormFile与Commons-FileUpload控件使用心得
- zoj 3528 Parterre
- swfobject.embedSWF属性与用法
- 使用VS2008开发MFC,如何支持中文输入?
- Ajax中的中文乱码问题的解决方案