java 在进行处理时,将那些数(带小数点)的结果转换成 double 类型了。【开 Eclipse 版的999个理由 & 需要理由吗?】 http://community.csdn.net/Expert/topic/3472/3472604.xml?temp=.7752497

解决方案 »

  1.   

    解决办法是强制类型转换:float f = (float) (2.8+2.4+2.27)
      

  2.   

    精度问题。
    可以用java.text.NumberFormat进行格式化。当然如果你知道精度的话,比如两位小数,可以直接*100转成int来操作。
      

  3.   

    如果要求精确的答案,请避免使用 float 和 double而使用 BigDecimal 或者 int , long 例子:
    // Broken - uses floating point for monetary calculation!
    public static void main(String[] args) {
      double funds = 1.00;
      int itemsBought = 0;
      for (double price = .10; funds >= price; price += .10) {
        funds -= price;
        itemsBought++;
      }
      System.out.println(itemsBought + " items bought.");
      System.out.println("Change: $" + funds);
    }底下是英文的解释:The float and double types are designed primarily for scientific and engineering
    calculations. They perform binary floating-point arithmetic, which was carefully designed to
    furnish accurate approximations quickly over a broad range of magnitudes. They do not,
    however, provide exact results and should not be used where exact results are required.
    The float and double types are particularly ill-suited for monetary calculations because
    it is impossible to represent 0.1 (or any other negative power of ten) as a float or doubleThe right way to solve this problem is to use BigDecimal, int, or long
      

  4.   

    这个是使用 BigDecimal 的例子:public static void main(String[] args) {
       final BigDecimal TEN_CENTS = new BigDecimal(".10");
       int itemsBought = 0;
       BigDecimal funds = new BigDecimal("1.00");
       for (BigDecimal price = TEN_CENTS;funds.compareTo(price) >= 0;
             price = price.add(TEN_CENTS)) {
               itemsBought++;
               funds = funds.subtract(price);
       }
       System.out.println(itemsBought + " items bought.");
       System.out.println("Money left over: $" + funds);
    }
      

  5.   

    2.6+2.3+2.2=7.1000000000000005
    2.8+2.4+2.27=7.469999999999999以上这些数是double型的,不确定精度
      

  6.   

    不如有这样一个方法如何写?public double sum(double arg1, double arg2)
    {
       // add sum code
    }
      

  7.   

    所以说为什么要提倡使用BigDecimal
      

  8.   

    public static double sum(double arg1, double arg2)
    {
    BigDecimal bigDecima = new BigDecimal(arg1);
    BigDecimal sum = bigDecima.add(new BigDecimal(arg2));
    return sum.doubleValue();
    } System.out.println(math.sum(math.sum(arg1,arg2),arg3));
             ***********************
             7.6000000000000005
      

  9.   

    转贴 
    出处记不太清楚了 import java.math.BigDecimal;/**
     * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
     * 确的浮点数运算,包括加减乘除和四舍五入。
     */public class Calculate {  //默认除法运算精度  private static final int DEF_DIV_SCALE = 10;  //这个类不能实例化  private Calculate() {  }  /**
       * 提供精确的加法运算。
       * @param v1 被加数
       * @param v2 加数
       * @return 两个参数的和
       */  public static double add(double v1, double v2) {    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.add(b2).doubleValue();  }  /**
       * 提供精确的减法运算。
       * @param v1 被减数
       * @param v2 减数
       * @return 两个参数的差
       */  public static double sub(double v1, double v2) {    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.subtract(b2).doubleValue();  }  /**
       * 提供精确的乘法运算。
       * @param v1 被乘数
       * @param v2 乘数
       * @return 两个参数的积
       */  public static double mul(double v1, double v2) {    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.multiply(b2).doubleValue();  }  /**
       * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
       * 小数点以后10位,以后的数字四舍五入。
       * @param v1 被除数
       * @param v2 除数
       * @return 两个参数的商
       */  public static double div(double v1, double v2) {    return div(v1, v2, DEF_DIV_SCALE);  }  /**
       * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
       * 定精度,以后的数字四舍五入。
       * @param v1 被除数
       * @param v2 除数
       * @param scale 表示表示需要精确到小数点以后几位。
       * @return 两个参数的商
       */  public static double div(double v1, double v2, int scale) {    if (scale < 0) {      throw new IllegalArgumentException(          "The scale must be a positive integer or zero");    }    BigDecimal b1 = new BigDecimal(Double.toString(v1));    BigDecimal b2 = new BigDecimal(Double.toString(v2));    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  }  /**
       * 提供精确的小数位四舍五入处理。
       * @param v 需要四舍五入的数字
       * @param scale 小数点后保留几位
       * @return 四舍五入后的结果
       */  public static double round(double v, int scale) {    if (scale < 0) {      throw new IllegalArgumentException(          "The scale must be a positive integer or zero");    }    BigDecimal b = new BigDecimal(Double.toString(v));    BigDecimal one = new BigDecimal("1");    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  }}
      

  10.   

    double v =2.4;
    BigDecimal b = new BigDecimal(Double.toString(v));
    不能BigDecimal b = new BigDecimal(v);
      

  11.   

    好像javascript也是这样,不知道怎么处理