posts - 35,  comments - 7,  trackbacks - 0

今天遇到了这样的问题,就是浮点运算后数据比较出现错误,郁闷了半天,网上查了资料才发现浮点数直接用双目运算符连接会出现结果不准确问题。解决方法如下:
1。所有浮点运算都在数据库内做好,也就是都用sql实现了
2。用BigDecimal实现,方法如下(仅仅是个例子):

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小记 阅读(274) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 

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

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜