liyujie
2025-08-29 87c7c0d90966d729ca3d39cbfca77a39a43960eb
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
package benchmarks.regression;
 
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
 
public class DecimalFormatBenchmark {
 
    private static final String EXP_PATTERN = "##E0";
 
    private static final DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance();
    // Keep patternInstance for timing with patterns, to not dirty the plain instance.
    private static final DecimalFormat patternInstance = (DecimalFormat)
            DecimalFormat.getInstance();
    private static final DecimalFormat dfCurrencyUS = (DecimalFormat)
            NumberFormat.getCurrencyInstance(Locale.US);
    private static final DecimalFormat dfCurrencyFR = (DecimalFormat)
            NumberFormat.getInstance(Locale.FRANCE);
 
    private static final BigDecimal BD10E3 = new BigDecimal("10E3");
    private static final BigDecimal BD10E9 = new BigDecimal("10E9");
    private static final BigDecimal BD10E100 = new BigDecimal("10E100");
    private static final BigDecimal BD10E1000 = new BigDecimal("10E1000");
 
    private static final int WHOLE_NUMBER = 10;
    private static final double TWO_DP_NUMBER = 3.14;
 
    public static void formatWithGrouping(Object obj, int reps) {
        df.setGroupingSize(3);
        df.setGroupingUsed(true);
        for (int i = 0; i < reps; i++) {
            df.format(obj);
        }
    }
 
    public static void format(String pattern, Object obj, int reps) {
        patternInstance.applyPattern(pattern);
        for (int i = 0; i < reps; i++) {
            patternInstance.format(obj);
        }
    }
 
    public static void format(Object obj, int reps) {
        for (int i = 0; i < reps; i++) {
            df.format(obj);
        }
    }
 
    public static void formatToCharacterIterator(Object obj, int reps) {
        for (int i = 0; i < reps; i++) {
            df.formatToCharacterIterator(obj);
        }
    }
 
 
    public static void formatCurrencyUS(Object obj, int reps) {
        for (int i = 0; i < reps; i++) {
            dfCurrencyUS.format(obj);
        }
    }
 
    public static void formatCurrencyFR(Object obj, int reps) {
        for (int i = 0; i < reps; i++) {
            dfCurrencyFR.format(obj);
        }
    }
 
    public void time_formatGrouping_BigDecimal10e3(int reps) {
        formatWithGrouping(BD10E3, reps);
    }
 
    public void time_formatGrouping_BigDecimal10e9(int reps) {
        formatWithGrouping(BD10E9, reps);
    }
 
    public void time_formatGrouping_BigDecimal10e100(int reps) {
        formatWithGrouping(BD10E100, reps);
    }
 
    public void time_formatGrouping_BigDecimal10e1000(int reps) {
        formatWithGrouping(BD10E1000, reps);
    }
 
    public void time_formatBigDecimal10e3(int reps) {
        format(BD10E3, reps);
    }
 
    public void time_formatBigDecimal10e9(int reps) {
        format(BD10E9, reps);
    }
 
    public void time_formatBigDecimal10e100(int reps) {
        format(BD10E100, reps);
    }
 
    public void time_formatBigDecimal10e1000(int reps) {
        format(BD10E1000, reps);
    }
 
    public void time_formatPi(int reps) {
        format(Math.PI, reps);
    }
 
    public void time_formatE(int reps) {
        format(Math.E, reps);
    }
 
    public void time_formatUSD(int reps) {
        formatCurrencyUS(WHOLE_NUMBER, reps);
    }
 
    public void time_formatUsdWithCents(int reps) {
        formatCurrencyUS(TWO_DP_NUMBER, reps);
    }
 
    public void time_formatEur(int reps) {
        formatCurrencyFR(WHOLE_NUMBER, reps);
    }
 
    public void time_formatEurWithCents(int reps) {
        formatCurrencyFR(TWO_DP_NUMBER, reps);
    }
 
    public void time_formatAsExponent10e3(int reps) {
        format(EXP_PATTERN, BD10E3, reps);
    }
 
    public void time_formatAsExponent10e9(int reps) {
        format(EXP_PATTERN, BD10E9, reps);
    }
 
    public void time_formatAsExponent10e100(int reps) {
        format(EXP_PATTERN, BD10E100, reps);
    }
 
    public void time_formatAsExponent10e1000(int reps) {
        format(EXP_PATTERN, BD10E1000, reps);
    }
 
    public void time_formatToCharacterIterator10e3(int reps) {
        formatToCharacterIterator(BD10E3, reps);
    }
 
    public void time_formatToCharacterIterator10e9(int reps) {
        formatToCharacterIterator(BD10E9, reps);
    }
 
    public void time_formatToCharacterIterator10e100(int reps) {
        formatToCharacterIterator(BD10E100, reps);
    }
 
    public void time_formatToCharacterIterator10e1000(int reps) {
        formatToCharacterIterator(BD10E1000, reps);
    }
 
    public void time_instantiation(int reps) {
        for (int i = 0; i < reps; i++) {
            new DecimalFormat();
        }
    }
}