1、String str = "199.45"
   Double.parseDouble( str );
   结果不是199.45,而是199.4499999999999990
2、a=19 , b=99.63;
   c = a*b
   结果不是1892.97,而是1892.96999999999998这是怎么回事呢?

解决方案 »

  1.   

    要精确计算的时候不要使用float和double,是近似值
    DecimalFormat dc = new DecimalFormat();
    double num = (Double)dc.parse(s);BigDecimal bd1 = new BigDecimal(Integer.toString(a));
    BigDecimal bd2 = new BigDecimal(Double.toString(b));
    double c = bd1.multiply(bd2).doubleValue();
      

  2.   

    double的精度问题
    如果要精确计算,可以使用BigDicemal
    如果要按要求显示,可以自己format
    a=19 , b=99.63;
    c = a*b
    String s = String.format("%.2f", c);
      

  3.   

    DecimalFormat dc = new DecimalFormat();
    double num = (Double)dc.parse(s);BigDecimal bd1 = new BigDecimal(Integer.toString(a));
    BigDecimal bd2 = new BigDecimal(Double.toString(b));
    double c = bd1.multiply(bd2).doubleValue(); 
      

  4.   

    double本身就不是准确的,别纠结这个。解决方法原始数据*100,去掉小数点。 只做整数的操作。