posts - 35,  comments - 7,  trackbacks - 0

          今天遇到了這樣的問題,就是浮點(diǎn)運(yùn)算后數(shù)據(jù)比較出現(xiàn)錯(cuò)誤,郁悶了半天,網(wǎng)上查了資料才發(fā)現(xiàn)浮點(diǎn)數(shù)直接用雙目運(yùn)算符連接會出現(xiàn)結(jié)果不準(zhǔn)確問題。解決方法如下:
          1。所有浮點(diǎn)運(yùn)算都在數(shù)據(jù)庫內(nèi)做好,也就是都用sql實(shí)現(xiàn)了
          2。用BigDecimal實(shí)現(xiàn),方法如下(僅僅是個(gè)例子):

          import java.math.BigDecimal;

          public class tt {

           
          /**
            * 
          @param args
            
          */

           
          public static void main(String[] args) {
            
          float a = 1.1f;
            
          float b = 2.2f;
            tt t 
          = new tt();
            System.out.println(t.add(a,b));
            System.out.println(t.sub(a,b));
            System.out.println(t.mul(a,b));
            System.out.println(t.div(a,b));
            System.out.println(t.round(a));

           }

           
          public float add(float v1,float v2){//加法
             BigDecimal b1 = new BigDecimal(Float.toString(v1));
             BigDecimal b2 
          = new BigDecimal(Float.toString(v2));
             
          return b1.add(b2).floatValue();
            }


            
          public float sub(float v1,float v2){//減法
             BigDecimal b1 = new BigDecimal(Float.toString(v1));
             BigDecimal b2 
          = new BigDecimal(Float.toString(v2));
             
          return b1.subtract(b2).floatValue();
            }


            
          public float mul(float v1,float v2){//乘法
             BigDecimal b1 = new BigDecimal(Float.toString(v1));
             BigDecimal b2 
          = new BigDecimal(Float.toString(v2));
             
          return b1.multiply(b2).floatValue();
            }


            
          public float div(float v1,float v2){//除法
             BigDecimal b1 = new BigDecimal(Float.toString(v1));
             BigDecimal b2 
          = new BigDecimal(Float.toString(v2));
             
          return b1.divide(b2,3,BigDecimal.ROUND_HALF_UP).floatValue();
            }


            
          public float round(float v){//截取3位
             BigDecimal b = new BigDecimal(Float.toString(v));
             BigDecimal one 
          = new BigDecimal("1");
             
          return b.divide(one,3,BigDecimal.ROUND_HALF_UP).floatValue();
            }

          }

          posted on 2006-02-08 16:43 java小記 閱讀(279) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           

          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阜康市| 化隆| 云南省| 兴和县| 靖西县| 缙云县| 富民县| 长阳| 龙口市| 郴州市| 久治县| 温宿县| 临夏市| 蕉岭县| 宜春市| 南平市| 木兰县| 西青区| 康定县| 崇明县| 伊春市| 徐汇区| 塔城市| 平顶山市| 永清县| 昌宁县| 乡宁县| 灌阳县| 留坝县| 栾川县| 木里| 瑞安市| 内乡县| 巴南区| 高阳县| 克什克腾旗| 涞水县| 阿鲁科尔沁旗| 泗水县| 白玉县| 仙桃市|