@@ -31,9 +31,40 @@ public static double add(double v1, double v2) {
31
31
BigDecimal b1 = new BigDecimal (Double .toString (v1 ));
32
32
BigDecimal b2 = new BigDecimal (Double .toString (v2 ));
33
33
return b1 .add (b2 ).doubleValue ();
34
- }
35
-
36
- /**
34
+ }
35
+
36
+ /**
37
+ * 提供精确的加法运算
38
+ *
39
+ * @param v1 被加数
40
+ * @param v2 加数
41
+ * @return 两个参数的和
42
+ */
43
+ public static BigDecimal add (String v1 , String v2 ) {
44
+ BigDecimal b1 = new BigDecimal (v1 );
45
+ BigDecimal b2 = new BigDecimal (v2 );
46
+ return b1 .add (b2 );
47
+ }
48
+
49
+ /**
50
+ * 提供精确的加法运算
51
+ *
52
+ * @param v1 被加数
53
+ * @param v2 加数
54
+ * @param scale 保留scale 位小数
55
+ * @return 两个参数的和
56
+ */
57
+ public static String add (String v1 , String v2 , int scale ) {
58
+ if (scale < 0 ) {
59
+ throw new IllegalArgumentException (
60
+ "The scale must be a positive integer or zero" );
61
+ }
62
+ BigDecimal b1 = new BigDecimal (v1 );
63
+ BigDecimal b2 = new BigDecimal (v2 );
64
+ return b1 .add (b2 ).setScale (scale , BigDecimal .ROUND_HALF_UP ).toString ();
65
+ }
66
+
67
+ /**
37
68
* 提供精确的减法运算
38
69
* @param v1 被减数
39
70
* @param v2 减数
@@ -43,9 +74,40 @@ public static double substract(double v1, double v2) {
43
74
BigDecimal b1 = new BigDecimal (Double .toString (v1 ));
44
75
BigDecimal b2 = new BigDecimal (Double .toString (v2 ));
45
76
return b1 .subtract (b2 ).doubleValue ();
46
- }
47
-
48
- /**
77
+ }
78
+
79
+ /**
80
+ * 提供精确的减法运算。
81
+ *
82
+ * @param v1 被减数
83
+ * @param v2 减数
84
+ * @return 两个参数的差
85
+ */
86
+ public static BigDecimal sub (String v1 , String v2 ) {
87
+ BigDecimal b1 = new BigDecimal (v1 );
88
+ BigDecimal b2 = new BigDecimal (v2 );
89
+ return b1 .subtract (b2 );
90
+ }
91
+
92
+ /**
93
+ * 提供精确的减法运算
94
+ *
95
+ * @param v1 被减数
96
+ * @param v2 减数
97
+ * @param scale 保留scale 位小数
98
+ * @return 两个参数的差
99
+ */
100
+ public static String sub (String v1 , String v2 , int scale ) {
101
+ if (scale < 0 ) {
102
+ throw new IllegalArgumentException (
103
+ "The scale must be a positive integer or zero" );
104
+ }
105
+ BigDecimal b1 = new BigDecimal (v1 );
106
+ BigDecimal b2 = new BigDecimal (v2 );
107
+ return b1 .subtract (b2 ).setScale (scale , BigDecimal .ROUND_HALF_UP ).toString ();
108
+ }
109
+
110
+ /**
49
111
* 提供精确的乘法运算
50
112
* @param v1 被乘数
51
113
* @param v2 乘数
@@ -55,8 +117,40 @@ public static double multiply(double v1, double v2) {
55
117
BigDecimal b1 = new BigDecimal (Double .toString (v1 ));
56
118
BigDecimal b2 = new BigDecimal (Double .toString (v2 ));
57
119
return b1 .multiply (b2 ).doubleValue ();
58
- }
59
-
120
+ }
121
+
122
+ /**
123
+ * 提供精确的乘法运算
124
+ *
125
+ * @param v1 被乘数
126
+ * @param v2 乘数
127
+ * @param scale 保留scale 位小数
128
+ * @return 两个参数的积
129
+ */
130
+ public static double mul (double v1 , double v2 , int scale ) {
131
+ BigDecimal b1 = new BigDecimal (Double .toString (v1 ));
132
+ BigDecimal b2 = new BigDecimal (Double .toString (v2 ));
133
+ return round (b1 .multiply (b2 ).doubleValue (), scale );
134
+ }
135
+
136
+ /**
137
+ * 提供精确的乘法运算
138
+ *
139
+ * @param v1 被乘数
140
+ * @param v2 乘数
141
+ * @param scale 保留scale 位小数
142
+ * @return 两个参数的积
143
+ */
144
+ public static String mul (String v1 , String v2 , int scale ) {
145
+ if (scale < 0 ) {
146
+ throw new IllegalArgumentException (
147
+ "The scale must be a positive integer or zero" );
148
+ }
149
+ BigDecimal b1 = new BigDecimal (v1 );
150
+ BigDecimal b2 = new BigDecimal (v2 );
151
+ return b1 .multiply (b2 ).setScale (scale , BigDecimal .ROUND_HALF_UP ).toString ();
152
+ }
153
+
60
154
/**
61
155
* 提供(相对)精确的除法运算,当发生除不尽的情况时,
62
156
* 精确到小数点以后10位,以后的数字四舍五入.
@@ -67,7 +161,8 @@ public static double multiply(double v1, double v2) {
67
161
public static double divide (double v1 , double v2 ) {
68
162
return divide (v1 , v2 , DEF_DIV_SCALE );
69
163
}
70
-
164
+
165
+
71
166
/**
72
167
* 提供(相对)精确的除法运算.
73
168
* 当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入.
@@ -85,7 +180,25 @@ public static double divide(double v1, double v2, int scale) {
85
180
BigDecimal b1 = new BigDecimal (Double .toString (v1 ));
86
181
BigDecimal b2 = new BigDecimal (Double .toString (v2 ));
87
182
return b1 .divide (b2 , scale , BigDecimal .ROUND_HALF_UP ).doubleValue ();
88
- }
183
+ }
184
+
185
+ /**
186
+ * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
187
+ * 定精度,以后的数字四舍五入
188
+ *
189
+ * @param v1 被除数
190
+ * @param v2 除数
191
+ * @param scale 表示需要精确到小数点以后几位
192
+ * @return 两个参数的商
193
+ */
194
+ public static String divide (String v1 , String v2 , int scale ) {
195
+ if (scale < 0 ) {
196
+ throw new IllegalArgumentException ("The scale must be a positive integer or zero" );
197
+ }
198
+ BigDecimal b1 = new BigDecimal (v1 );
199
+ BigDecimal b2 = new BigDecimal (v1 );
200
+ return b1 .divide (b2 , scale , BigDecimal .ROUND_HALF_UP ).toString ();
201
+ }
89
202
90
203
/**
91
204
* 提供精确的小数位四舍五入处理
@@ -101,10 +214,60 @@ public static double round(double v, int scale) {
101
214
BigDecimal b = new BigDecimal (Double .toString (v ));
102
215
BigDecimal one = new BigDecimal ("1" );
103
216
return b .divide (one , scale , BigDecimal .ROUND_HALF_UP ).doubleValue ();
104
- }
105
-
106
-
107
- /**
217
+ }
218
+
219
+ /**
220
+ * 提供精确的小数位四舍五入处理
221
+ *
222
+ * @param v 需要四舍五入的数字
223
+ * @param scale 小数点后保留几位
224
+ * @return 四舍五入后的结果
225
+ */
226
+ public static String round (String v , int scale ) {
227
+ if (scale < 0 ) {
228
+ throw new IllegalArgumentException (
229
+ "The scale must be a positive integer or zero" );
230
+ }
231
+ BigDecimal b = new BigDecimal (v );
232
+ return b .setScale (scale , BigDecimal .ROUND_HALF_UP ).toString ();
233
+ }
234
+
235
+ /**
236
+ * 取余数
237
+ *
238
+ * @param v1 被除数
239
+ * @param v2 除数
240
+ * @param scale 小数点后保留几位
241
+ * @return 余数
242
+ */
243
+ public static String remainder (String v1 , String v2 , int scale ) {
244
+ if (scale < 0 ) {
245
+ throw new IllegalArgumentException (
246
+ "The scale must be a positive integer or zero" );
247
+ }
248
+ BigDecimal b1 = new BigDecimal (v1 );
249
+ BigDecimal b2 = new BigDecimal (v2 );
250
+ return b1 .remainder (b2 ).setScale (scale , BigDecimal .ROUND_HALF_UP ).toString ();
251
+ }
252
+
253
+ /**
254
+ * 取余数 BigDecimal
255
+ *
256
+ * @param v1 被除数
257
+ * @param v2 除数
258
+ * @param scale 小数点后保留几位
259
+ * @return 余数
260
+ */
261
+ public static BigDecimal remainder (BigDecimal v1 , BigDecimal v2 , int scale ) {
262
+ if (scale < 0 ) {
263
+ throw new IllegalArgumentException (
264
+ "The scale must be a positive integer or zero" );
265
+ }
266
+ return v1 .remainder (v2 ).setScale (scale , BigDecimal .ROUND_HALF_UP );
267
+ }
268
+
269
+
270
+ /**
108
271
* 金额分割,四舍五人金额
109
272
* @param s
110
273
* @return
0 commit comments