`
孟雪雪
  • 浏览: 53028 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

import java.math.BigDecimal;

    博客分类:
  • JAVA
阅读更多
import java.math.BigDecimal;  
 
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();  
  }  
     
/** 
  *  提供精确的减法运算。  
  *  @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();  
   }  
 
    /** 
    * 求给定双精度数组中值的最大值 
    * @param inputData 输入数据数组 
    * @return 运算结果,如果输入值不合法,返回为-1 
    */ 
    public static double getMax(double[] inputData) {  
        if (inputData == null || inputData.length == 0)  
            return -1;  
        int len = inputData.length;  
        double max = inputData[0];  
        for (int i = 0; i < len; i++) {  
            if (max < inputData[i])  
                max = inputData[i];  
        }  
        return max;  
    }  
      
    /** 
    * 求求给定双精度数组中值的最小值 
    * @param inputData 输入数据数组 
    * @return 运算结果,如果输入值不合法,返回为-1 
    */ 
    public static double getMin(double[] inputData) {  
        if (inputData == null || inputData.length == 0)  
            return -1;  
        int len = inputData.length;  
        double min = inputData[0];  
        for (int i = 0; i < len; i++) {  
            if (min > inputData[i])  
                min = inputData[i];  
        }  
        return min;  
    }  
      
    /** 
    * 求给定双精度数组中值的和 
    * @param inputData 输入数据数组 
    * @return 运算结果 
    */ 
    public static double getSum(double[] inputData) {  
        if (inputData == null || inputData.length == 0)  
        return -1;  
        int len = inputData.length;  
        double sum = 0;  
        for (int i = 0; i < len; i++) {  
            sum = Arith.add(sum, inputData[i]);  
        }     
        return sum;   
    }
  /** 
   * 求给定双精度数组中值的数目 
   * @param input Data 输入数据数组 
   * @return 运算结果 
   */ 
   public static int getCount(double[] inputData) {  
       if (inputData == null)  
           return -1;  
       return inputData.length;  
    }  
      
    /** 
    * 求给定双精度数组中值的平均值 
    * @param inputData  输入数据数组 
    * @return 运算结果 
    */ 
    public static double getAverage(double[] inputData) {  
        if (inputData == null || inputData.length == 0)  
            return -1;  
        int len = inputData.length;  
        double result;  
        result = Arith.div(getSum(inputData),len, 3);  
        return result;  
    }  
      
    /** 
    * 求给定双精度数组中值的平方和 
    * @param inputData 输入数据数组 
    * @return 运算结果 
    */ 
    public static double getSquareSum(double[] inputData) {  
        if(inputData==null||inputData.length==0)  
            return -1;  
        int len=inputData.length;  
        double sqrsum = 0.0;  
        for (int i = 0; i <len; i++) {  
            sqrsum = Arith.add(sqrsum, Arith.mul(inputData[i], inputData[i]));   
        }  
        return sqrsum;  
    }  
      
    /** 
    * 求给定双精度数组中值的方差 
    * @param inputData 输入数据数组 
    * @return 运算结果 
    */ 
    public static double getVariance(double[] inputData) {  
        int count = getCount(inputData);  
        double sqrsum = getSquareSum(inputData);  
        double average = getAverage(inputData);  
        double result;  
        result = Arith.div(Arith.sub(sqrsum, Arith.mul(count, Arith.mul(average, average))), count, 5);  
        return result;   
    }  
      
    /** 
    * 求给定双精度数组中值的标准差 
    *  
    * @param inputData 输入数据数组 
    * @param scale     保留小数点位数 
    * @return 运算结果 
    */ 
    public static double getStandardDiviation(double[] inputData,int scale) {  
        double result;  
        //绝对值化很重要  
        result = Math.sqrt(Math.abs(getVariance(inputData)));  
        result = Arith.round(result, scale);  
        return result;  
    }  
      
    public static void main(String[] args){  
        double [] testData=new double[]{1,2,3,4,5,6,7,8,10};  
        System.out.println(Arith.getStandardDiviation(testData,3));  
    }  
 
}
分享到:
评论

相关推荐

    计算器代吗

    import java.math.BigDecimal; import java.util.regex.Pattern; import com.android.xiong.gridlayoutTest.R.id; import android.os.Bundle; import android.app.Activity; import android.view.Menu; ...

    java.math包下计算浮点数和整数的类的实例

    import java.math.BigDecimal; public class HelloWorld { public static void main(String[] args) { BigDecimal a = new BigDecimal("1.0"); BigDecimal b = new BigDecimal("0.1"); BigDecimal c = a....

    Java web的商品信息修改和删除

    import java.math.BigDecimal; public class CommodityBean { private int id; // 产品 id private int class_id; // 分类 id private String title; // 名称 private BigDecimal price; // 价格 private ...

    java导出excel的详细例子

    import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import javax.faces.context.FacesContext; import javax.faces.event....

    Java 加减乘除工具类(解决精度损失问题)

    import java.math.BigDecimal; import java.text.DecimalFormat; public class Calculation { public static final DecimalFormat df = new DecimalFormat("######0.00"); /** * @methodName format2point * @...

    不同中奖概率产生中奖人

    import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random; public class Lottery { private List&lt;LotteryProp&gt; participants; public Lottery(List...

    java使double保留两位小数的多方法共2页.pdf

    import java.math.BigDecimal; double num = 3.14159; BigDecimal bd = new BigDecimal(String.valueOf(num)); bd = bd.setScale(2, RoundingMode.HALF_UP); String formattedNum = bd.toPlainString(); ...

    xsolla-sdk-java:[已弃用] 适用于 Java 的 Xsolla SDK

    [已弃用] 适用于 Java 的 Xsolla SDK 用于与交互的官方 SDK 要求 JDK 1.7 Maven 3 安装 添加到您的 pom.xml: ... &lt;artifactId&gt;sdk &lt;version&gt;1.0.1 ...import java.math.BigDecimal; import java.

    运用BigDecimal精确计算

    创建`BigDecimal`对象通常有两种方式,一是通过`new BigDecimal(String)`构造器,二是通过`BigDecimal.valueOf(double)`方法。前者接受一个字符串,后者接受一个double值。但需要注意的是,从`double`转换成`...

    BigDecimal向Double转换

    double value = Double.parseDouble(bigDecimal.toString()); System.out.println("Safe Converted Value: " + value); } } ``` 通过这种方式,即使BigDecimal中的值非常大或具有很多小数位,也可以准确无误地...

    java(小数点,百分号处理)

    import java.math.BigDecimal; public class FormatDemo { public static void main(String[] args) { double x = 23.5455; NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits...

    jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题

    import java.math.BigDecimal; public class BigDecimalSerialize extends JsonSerializer&lt;BigDecimal&gt; { @Override public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider ...

    bigdecimal

    import java.math.BigDecimal; public class Arith { // 默认精度 private static final int DEF_DIV_SCALE = 10; // 私有构造函数,防止实例化 private Arith() {} /** * 提供精确的加法计算。 * @param ...

    java 解惑.doc

    import java.math.BigDecimal; public class Change { public static void main(String[] args) { BigDecimal amountPaid = new BigDecimal("2.00"); BigDecimal itemCost = new BigDecimal("1.10"); ...

    BigDecimal加减乘除计算.pdf

    import java.math.BigDecimal; public class Test { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("0.005"); BigDecimal num2 = new BigDecimal("1000000"); // 加法 ...

    java 四舍五入 需要的朋友看看

    import java.math.BigDecimal; public class Test { public static void main(String[] args) { double i = 3.856; System.out.println("四舍五入(3.856)=" + new BigDecimal(i).setScale(0, BigDecimal.ROUND_...

    spring JDBC

    import java.math.BigDecimal; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import ...

    详解APP微信支付(java后台_统一下单和回调)

    import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest;...

Global site tag (gtag.js) - Google Analytics