关于java 中double型数据的四舍五入与加减乘除

  1. java中用DecimalFormat df = new DecimalFormat("#######0.00");进行四舍五入时,如果最后一位为5,则会直接舍掉,而不会入上去。如:12.515,得到得结果将是12.51。解决方法:   
  2. blic static double round(double v,int scale){   
  3.       if(scale<0){   
  4.           throw new IllegalArgumentException(   
  5.               "The scale must be a positive integer or zero");   
  6.       }   
  7.       BigDecimal b = new BigDecimal(Double.toString(v));   
  8.       BigDecimal one = new BigDecimal("1");   
  9.       return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
  10.   }   
  11.   java中的浮点数类型floatdouble不能进行运算,遇到有些数据得到的数据不准确。如:3.121-1=3.1209999999998。解决方法:   
  12. blic class Arith {   
  13.   private static final int DEF_DIV_SCALE = 10;   
  14.      
  15.   /**  
  16.    * 两个Double数相加  
  17.    * @param v1  
  18.    * @param v2  
  19.    * @return Double  
  20.    */  
  21.   public static Double add(Double v1,Double v2){   
  22.       BigDecimal b1 = new BigDecimal(v1.toString());   
  23.       BigDecimal b2 = new BigDecimal(v2.toString());   
  24.       return b1.add(b2).doubleValue();   
  25.   }   
  26.      
  27.   /**  
  28.    * 两个Double数相减  
  29.    * @param v1  
  30.    * @param v2  
  31.    * @return Double  
  32.    */  
  33.   public static Double sub(Double v1,Double v2){   
  34.       BigDecimal b1 = new BigDecimal(v1.toString());   
  35.       BigDecimal b2 = new BigDecimal(v2.toString());   
  36.       return b1.subtract(b2).doubleValue();   
  37.   }   
  38.      
  39.   /**  
  40.    * 两个Double数相乘  
  41.    * @param v1  
  42.    * @param v2  
  43.    * @return Double  
  44.    */  
  45.   public static Double mul(Double v1,Double v2){   
  46.       BigDecimal b1 = new BigDecimal(v1.toString());   
  47.       BigDecimal b2 = new BigDecimal(v2.toString());   
  48.       return b1.multiply(b2).doubleValue();   
  49.   }   
  50.      
  51.   /**  
  52.    * 两个Double数相除  
  53.    * @param v1  
  54.    * @param v2  
  55.    * @return Double  
  56.    */  
  57.   public static Double div(Double v1,Double v2){   
  58.       BigDecimal b1 = new BigDecimal(v1.toString());   
  59.       BigDecimal b2 = new BigDecimal(v2.toString());   
  60.       return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();   
  61.   }   
  62.      
  63.   /**  
  64.    * 两个Double数相除,并保留scale位小数  
  65.    * @param v1  
  66.    * @param v2  
  67.    * @param scale  
  68.    * @return Double  
  69.    */  
  70.   public static Double div(Double v1,Double v2,int scale){   
  71.       if(scale<0){   
  72.           throw new IllegalArgumentException(   
  73.           "The scale must be a positive integer or zero");   
  74.       }   
  75.       BigDecimal b1 = new BigDecimal(v1.toString());   
  76.       BigDecimal b2 = new BigDecimal(v2.toString());   
  77.       return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
  78.   }   

你可能感兴趣的:(java,UP)