1
zj
2024-06-13 8eea5be3b36875bd4ffe70e6c3a5bb07b1d829bf
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
package com.yami.trading.common.util;
 
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
 
public class ReflectionUtil {
 
    // 调整单个对象的BigDecimal属性精度
    public static void adjustBigDecimalPrecision(Object obj, int precision) {
        if (obj == null) return;
 
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            if (field.getType() == BigDecimal.class) {
                try {
                    field.setAccessible(true);
                    BigDecimal originalValue = (BigDecimal) field.get(obj);
                    if (originalValue != null) {
                        BigDecimal adjustedValue = originalValue.setScale(precision, RoundingMode.HALF_UP);
                        field.set(obj, adjustedValue);
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 
    // 调整对象列表中每个对象的BigDecimal属性精度
    public static void adjustBigDecimalPrecisionForList(List<?> objList, int precision) {
        if (objList == null) return;
        for (Object obj : objList) {
            adjustBigDecimalPrecision(obj, precision);
        }
    }
 
    public static void main(String[] args) {
        // 测试
        List<MyClass> list = new ArrayList<>();
        list.add(new MyClass(new BigDecimal("12345.67890123456789012345")));
        list.add(new MyClass(new BigDecimal("98765.43210987654321")));
 
        adjustBigDecimalPrecisionForList(list, 8);
 
        for (MyClass obj : list) {
            System.out.println(obj.getDecimalValue());
        }
        // 输出:
        // 12345.67890123
        // 98765.43210988
    }
}
 
class MyClass {
    private BigDecimal decimalValue;
 
    public MyClass() {
    }
 
    public MyClass(BigDecimal decimalValue) {
        this.decimalValue = decimalValue;
    }
 
    public BigDecimal getDecimalValue() {
        return decimalValue;
    }
 
    public void setDecimalValue(BigDecimal decimalValue) {
        this.decimalValue = decimalValue;
    }
}