用float做计算的时候总是出问题,得到很奇怪的计算结果!
我的计算公式是:
x * y
x永远是一个能将10整除的数!
y是一个百分比(小于100的百分比:区间0.1--1.0递增、递减精度为0.1就是只有可能是0.1,0.2这样的的不可能0.11111这种情况)
理论上不可能出现小数啊!可是不知道怎么总会出现小数,类似5.999999999
而不是计算出来是6
然后我搜索了baidu看到有类似问题,有些人说用
BigDecimal这个类,发现计算的时候也有类似问题啊

解决方案 »

  1.   

    public static Float Round(Float t,int scale){
    BigDecimal big = new BigDecimal(t);
    return big.setScale(scale,BigDecimal.ROUND_HALF_UP).floatValue();
    }
    用这信函数转换一下你要的结果就没问题了
      

  2.   

    使用 类 java.math.BigDecimal
      

  3.   

    参见文档
    http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/math/class-use/BigDecimal.html
      

  4.   

    提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类
      

  5.   

    二进制无法精确表示浮点数,所以,浮点数的运算都是不准确的,在要求精确结果的场合下都不要使用float类型数据
      

  6.   

    单精度参与运算都先转换为double
      

  7.   

    发表于:2007-10-19 17:16:493楼 得分:15 
    并不是所有的小数都可以用二进制浮点数来精确表示的 
    二进制浮点不可能将0.1——或者10的其它任何次负幂——精确表示为一个长度有限的二进制小数 (看下计算机组成原理中的浮点数的表示方法,好象有不同的标准) 解决的方法可以用BigDecimal类,该类位于java.math包中,它的用法其实挺简单的,不妨自己去查下API  
      

  8.   

    用BigDecimal 
    假设某商品单价为x,购买数量为y,求总价。精度要求为小数点精确到2位BigDecimal per_price = new BigDecimal(x);
    BigDecimal num_price = new BigDecimal(y);BigDecimal total_price = per_price .multiply(num_price).setScale(2,RoundingMode.HALF_UP);