String price = "3.00";
String price1 = String.valueOf(Double.parseDouble(price)*90/100); 
String price2 = String.valueOf(Double.parseDouble(price)*70/100); 
String price3 = String.valueOf(Double.parseDouble(price)*0.7);  System.out.println("=========price1========"+price1);
System.out.println("=========price2========"+price2);
System.out.println("=========price3========"+price3);结果如下:
=========price1========2.7
=========price2========2.1
=========price3========2.0999999999999996price3的问题很蛋疼啊!!!Java算法

解决方案 »

  1.   

     public static void main (String[] args) {
         double d = mul(3.00,0.7);
         System.out.println(d);
         }
        
        public static double mul(double d1,double d2){ 
            BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
            BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
            return bd1.multiply(bd2).doubleValue(); 
        } 处理一下
      

  2.   

    double(Double)它是浮点数表示的,计算过程中就不能保证精确运算了,用BigDecimal就像楼上
      

  3.   

    当price=3,6,7,11 的时候会出现失精的问题,其他的都没问题,这又是什么原因呢?
      

  4.   

    个人建议:你可以先全部数据处理为整数,然后按照整数处理,如果有必要在BigDecimal的处理,精度会好点!
      

  5.   

    当price等于其它数的时候也不是说它就是精确的了,只是在它所选择的精度下,恰巧能进位成貌似精确的数