sql 除法精確計算問題

2021-04-23 02:06:39 字數 670 閱讀 7642

在做日終批處理是發現如果交易金額過大就會報 sql0802n  發生算術溢位或其它算術異常。  sqlstate=22003

檢查一下sql語句發現是因為 fl/100 fl 的問題,fl(費率)=2%,經過資料庫(db2)計算後為0.020000000000000000000000000

格式是decimal(31,27),由於交易金額為decimal(14,2),所以計算是會報算數溢位異常。

我的解決方法是取消用sql計算費率,改為在程式中處理。使用bigdecimal除以100。

附sql:

select zdsbbh,cphxx,zdxe,zgxe,jyje*fl sxf from (select zdsbbh,khdm,sum(jyje) jyje,cphxx from beps_wastebook2 where jylx='06' group by zdsbbh ,khdm,cphxx) as w left join (select khdm,fldm from cms_custfeerate where jylx='06' and ztbz ='1')  as c on w.khdm = c.khdm left join (select fldm,fl/100 fl,zdxe,zgxe from cms_feerate where jylx='06' and ztbz ='1')as f on c.fldm=f.fldm

BigDecimal除法精確計算及坑點

bigdecimal通常在涉及到精確計算的時候會用到,下面是自己多次錯誤使用bigdecimal的總結。bigdecimal初始化小數時,盡量用字串形式,例如new bigdecimal 0.1 bigdecimal型別變數比較大小時用compareto方法,判斷變數值是否為0,與bigdecima...

SQL 根據日期精確計算年齡

第一種 一張人員資訊表裡有一人生日 birthday 列,跟據這個列,算出該人員的年齡 datediff year,birthday,getdate 例 birthday 2003 3 8 getdate 2008 7 7 結果為 5 這樣結果是會返回該人員的大概年齡,但不精確.不會精確到月或日.按...

SQL 根據日期精確計算年齡

第一種 一張人員資訊表裡有一人生日 birthday 列,跟據這個列,算出該人員的年齡 datediff year,birthday,getdate 例 birthday 2003 3 8 getdate 2008 7 7 結果為 5 這樣結果是會返回該人員的大概年齡,但不精確.不會精確到月或日.按...