有下列程序:
public class Dec { 
public static void main (String arg[])

double b1=36.48;
double b2=5.51;
double b3=b1+b2 ;
System.out.println("b3 is "+b3); 

}b3 的值为什么不是等于41.99
而是小数点后有很多位??
要怎么做才能让 36.48+5.51=41.99 ??

解决方案 »

  1.   

    import java.math.BigDecimal;
     
    /**
     * 由於Java的簡單類型不能夠精確的對浮點數進行運算,這個工具類提供精
     * 確的浮點數運算,包括加減乘除和四捨五入。
     */
    public class Arith{
     
        //默認除法運算精度
        private static final int DEF_DIV_SCALE = 10;
     
        //這個類不能實例化
        private Arith(){
        }
     
     
        /**
         * 提供精確的加法運算。
         * @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();
        }
     
    }
    试试看
      

  2.   

    用了BigDecimal,结果小数点后还是有很多位。double 的计算大部分是准确的,为什么有的会有小数点后很多位?
      

  3.   

    看到这个问题float/double们很不服气,凭什么int/long们和我们一样32/64bit,他们只要精确表示2^32/2^64个值,却要我们精确表示出无数个值,凭什么,又不涨我们工资
      

  4.   

    用BigDecimal要怎么做?? 我用了:import java.math.BigDecimal; 
    public  class  BigDec {
    public  static  void main (String arg[])
    {     BigDecimal a1 = new BigDecimal(36.48); 
             BigDecimal a2 = new BigDecimal(5.51); 
              BigDecimal a3=a1.add(a2);
             System.out.println(   a3 ) ;  
                    }
             }
         结果a3 还是小数点后有很多位, 那要怎么做 才能让 36.48+5.51=41.99 ??
      

  5.   

    用完BigDecimal,显示的时候用NumberFormat(好像是这样写的:))