新的起點 新的開始

          快樂生活 !

          銀行在線轉賬系統中竟然有這樣的Bug 而長達4年沒有人發現,看看大家能不能找出問題?一天過去了 沒有正解,今天說說正確答案

                 最近忙于Fix Bug, 在某系統中發現一個Bug,而這個Bug竟然從2004年就存在!! 有這么一個Scenerio:
           周期性轉賬,計算需要轉賬次數 eg: 200 每次20 那么 轉賬次數=10    239 每次轉 23.9 
          轉賬次數=10

          代碼1:

          float  sumTranferAmount;
          float  perTransferAmount;
          transactionCount = (int)Math.ceil((Math.round((sumTRanferAmount/perTransferAmount)*100.0/ 100.0))

          代碼2:

                  float sumTranferAmount;
                  
          float perTransferAmount;
                  
          int transactionCount = (int)(sumTranferAmount / perTransferAmount);
                  
          if ( (sumTranferAmount%  (perTransferAmount!= 0){
                      transactionCount
          ++;
           
                  }

          這兩段代碼那個正確呢? 大家不要測試,看能不能找出問題?

          其實這兩個代碼都是錯誤的。
          代碼1不要說,錯到十萬八千里了。對于代碼2,其實在取余運算出現了問題。取余運算前提是這兩個數不是小數(金額都是保留兩位小數)。
          只要讓sumTranferAmount
          *100%pertransferAmount*100 就正確了。

          posted on 2009-04-10 15:01 advincenting 閱讀(2858) 評論(5)  編輯  收藏

          評論

          # re: 一個在線交易系統中竟然有這樣的Bug 而長達4年沒有人發現,看看大家能不能不測試找出問題? 2009-04-10 16:11 lveyo

          JAVA里好像處理金額的計算最好不要用float,double這樣的簡單數據類型  回復  更多評論   

          # re: 一個在線交易系統中竟然有這樣的Bug 而長達4年沒有人發現,看看大家能不能不測試找出問題? 2009-04-10 16:13 advincenting

          其實這兩個都不對 呵呵!  回復  更多評論   

          # re: 銀行在線轉賬系統中竟然有這樣的Bug 而長達4年沒有人發現,看看大家能不能找出問題? 2009-04-10 23:30 MyYate

          呵呵,第一個肯定是錯的,我看了一下,如果有239元,我每次轉238元,應該需要轉兩次。
          第二個不清楚,不過如果我不考慮實際情況,每次轉238.999999元,transactionCount =1,所以也是錯的。
          float,double計算就是這點不好。  回復  更多評論   

          # re: 銀行在線轉賬系統中竟然有這樣的Bug 而長達4年沒有人發現,看看大家能不能找出問題? 2009-04-12 11:01 程吉

          不是有可以解決不能精確計算的float和double類型的類么???
          不能用?  回復  更多評論   

          # re: 銀行在線轉賬系統中竟然有這樣的Bug 而長達4年沒有人發現,看看大家能不能找出問題?一天過去了 沒有正解,今天說說正確答案 2009-04-15 12:12 origo

          建議采用BigDecimal,或者用Double。在Float之間的除運算會出現差錯,貌似會在.000級別出現誤差。  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           

          公告

          Locations of visitors to this pageBlogJava
        1. 首頁
        2. 新隨筆
        3. 聯系
        4. 聚合
        5. 管理
        6. <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統計

          常用鏈接

          留言簿(13)

          隨筆分類(71)

          隨筆檔案(179)

          文章檔案(13)

          新聞分類

          IT人的英語學習網站

          JAVA站點

          優秀個人博客鏈接

          官網學習站點

          生活工作站點

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定边县| 灵武市| 汕头市| 荆州市| 犍为县| 昌黎县| 长垣县| 莱西市| 成武县| 长兴县| 大厂| 安宁市| 红河县| 扶风县| 饶平县| 鹤壁市| 元朗区| 铜川市| 阿城市| 区。| 灯塔市| 临桂县| 建水县| 鄂托克前旗| 清河县| 博爱县| 邛崃市| 昌吉市| 杭锦旗| 松原市| 鲁山县| 新宁县| 桃江县| 大新县| 简阳市| 潼南县| 上林县| 临江市| 西吉县| 湘潭县| 界首市|