zhuguifei
2026-03-10 2c1fd10c6fbabb8e9f0e9f07fe66fb36c008e883
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package com.shlanbao.tzsc.utils.tools;
 
import java.math.BigDecimal;
import java.util.List;
import java.util.Random;
 
 /**
  * 数据计算工具类
  * <li>@author Leejean
  * <li>@create 2014-6-24 下午04:13:31
  */
public class MathUtil{
    private final static Double MAX_DOUBLE_VALUE = 999999999999.99;
    private final static Double MIN_DOUBLE_VALUE = -999999999999.99;
    private final static Random random = new Random();
    /**
     * 四舍五入
     * @param value
     * @param scale 保留小数点位数
     * @return
     */
    public static Double roundHalfUp(Double value, int scale)
    {
        try {
            BigDecimal bigDecimal = new BigDecimal(value);
            double resultValue = bigDecimal.setScale(scale,BigDecimal.ROUND_HALF_UP).doubleValue();
            return resultValue;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0D;
    }
    /**
     * 求和
     * @param values
     * @return 
     */
    public static Double sumValue(List<Double> values)
    {
        if (values == null || values.size() == 0){            
            return 0.0d;
        }
        Double sumValue = 0.0d;
        for (Double value : values)
        {
            sumValue += value;
        }
        return sumValue;
    }
    /**
     * 求均值.并保存到小数点后面几位
     * @param values
     * @return
     */
    public static Double avgValue(List<Double> values)
    {
        if (values == null || values.size() == 0)
            return 0.0d;
        // 1. 求和
        Double sumValue = sumValue(values);
        // 2. 计算并四舍五入
        return sumValue / values.size();
    }
    /**
     * 计算最大值
     * @param initDoubleArray
     * @return
     */
    public static Double maxValue(List<Double> initDoubleArray)
    {
        Double max = MIN_DOUBLE_VALUE;
        for (Double cur : initDoubleArray) {
            if (cur > max)
                max = cur;
        }
        return max;
    }
    /**
     * 计算最小值
     * @param initDoubleArray
     * @return
     */
    public static Double minValue(List<Double> initDoubleArray)
    {
        Double min = MAX_DOUBLE_VALUE;
        for (Double cur : initDoubleArray) {
            if (cur < min)
                min = cur;
        }
        return min;
    }
    /**
     * 计算方差
     * @param initDoubleArray
     * @return
     */
    public static Double svValue(List<Double> initDoubleArray)
    {
        double sv = 0.0;
        if (initDoubleArray.size() < 1) return 0.0;
        double avg = avgValue(initDoubleArray);
        for (int i=0;i<initDoubleArray.size();i++)
        {
            sv += (avg - initDoubleArray.get(i)) * (avg - initDoubleArray.get(i));
        }
        if (sv > 0) 
        {
            if(initDoubleArray.size() - 1!=0)
            {
                return sv/(initDoubleArray.size() - 1);
            }
            else
            {
                return 0.0;
            }            
        }
            
        return 0.0;
    }
    public static void main(String[] args) {
        //四舍五入
        //System.out.println(MathUtil.roundHalfUp(1231.4454232, 2));
        
        /*List<Double> nums=new ArrayList<Double>();
        nums.add(1.2);
        nums.add(1.6);
        nums.add(3.2);
        nums.add(4.21111);
        //求和
*/        //System.out.println(MathUtil.sumValue(nums));
        //求平均值
        //System.out.println(MathUtil.avgValue(nums));
        //System.out.println(MathUtil.maxValue(nums));
        //System.out.println(MathUtil.minValue(nums));
        /*System.out.println(MathUtil.getRandomInt(1000,9999));
        System.out.println(MathUtil.getRandomDouble(1000,9999));*/
        System.out.println(MathUtil.getRandomDouble(5,6,3));
    }
    /**
     * 获得指定范围随机整数
     * @author Leejean
     * @create 2014年12月19日上午11:46:12
     * @param min 最小值
     * @param max 最大值
     * @return
     */
    public static Integer getRandomInt(Integer min,Integer max){
        return random.nextInt(max)%(max-min+1) + min;
    }
    /**
     * 获得指定范围随机小数
     * @author Leejean
     * @create 2014年12月19日上午11:46:12
     * @param min 最小值
     * @param max 最大值
     * @param scale 精度
     * @return
     */
    public static Double getRandomDouble(Integer min,Integer max,Integer scale){
        return MathUtil.getRandomInt(min,max)+MathUtil.roundHalfUp(random.nextDouble(), scale);
    }
    
    
}