DigitalUtils.java
5.5 KB
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
165
166
package com.skua.tool.util;
import org.apache.commons.lang3.StringUtils;
import org.bytedeco.libfreenect2.Logger;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* <pre>
* 数字工具类
* </pre>
*
* @author sonin
* @version 1.0 2022/4/20 17:27
*/
public class DigitalUtils {
/**
* 计算保留n位小数
*
* @return
*/
public static String nPoint(Object src, int n) {
if (src == null) {
return String.format("%." + n + "f", 0D);
} else if (src instanceof Double) {
return String.format("%." + n + "f", src);
} else if (src instanceof String) {
if (isNumeric(src.toString())) {
return String.format("%." + n + "f", Double.parseDouble("" + src));
} else {
return String.format("%." + n + "f", 0D);
}
}
return "" + src;
}
/**
* 加法 保留两位小数
* @return
*/
public static String add(String val1 , String val2){
BigDecimal result = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(val1)){
result = new BigDecimal(val1);
// BigDecimal rounded = original.multiply( num2).setScale(2, BigDecimal.ROUND_HALF_UP);
}
if(StringUtils.isNotEmpty(val2)){
BigDecimal num2 = new BigDecimal(val2);
result = result.add( num2 );
result = result.multiply( num2).setScale(2, BigDecimal.ROUND_HALF_UP);
}
return result.toString();
}
/**
* 乘法 保留两位小数
* @return
*/
public static String multiply(String multiplier , String multiplicand){
String resultStr = "0";
if(multiplier != null ){
BigDecimal original = new BigDecimal(multiplier);
BigDecimal num2 = new BigDecimal(multiplicand);
// BigDecimal rounded = original.multiply( num2).setScale(2, BigDecimal.ROUND_HALF_UP);
resultStr = original.multiply( num2 ).toString();
}
return resultStr;
}
public static String subtract(String num1 , String num2){
String resultStr = null ;
if(StringUtils.isNotEmpty(num1) && StringUtils.isNotEmpty(num2) ){
BigDecimal num1_b = new BigDecimal(num1);
BigDecimal num2_b = new BigDecimal(num2);
// BigDecimal rounded = original.multiply( num2).setScale(2, BigDecimal.ROUND_HALF_UP);
resultStr = num1_b.subtract( num2_b ).toString();
}
return resultStr;
}
/***
* 比较两个数
* @param num1
* @param num2
* @return comparisonResult=0 相等; 大于返回1 ,小于返回-1
*/
public static Integer compareTo(String num1 , String num2){
Integer comparisonResult = null ;
if(StringUtils.isNotEmpty(num1) && StringUtils.isNotEmpty(num2) ){
BigDecimal num1_b = new BigDecimal(num1);
BigDecimal num2_b = new BigDecimal(num2);
// BigDecimal rounded = original.multiply( num2).setScale(2, BigDecimal.ROUND_HALF_UP);
comparisonResult = num1_b.compareTo( num2_b );
}
return comparisonResult ;
}
/**
* 除法 保留两位小数
* @param dividend 请输入被除数
* @param divisor 请输入除数
* @return
*/
public static String division(String dividend , String divisor ){
String resultStr = null;
String expression = dividend+ "/ "+ divisor;
resultStr = JSUtils.executeExpression(expression,"0.00");
/* try{
if( isNumber(dividend) && isNumber( divisor) && Double.parseDouble(divisor) != 0 ){
BigDecimal dividend_BD = new BigDecimal(dividend);
BigDecimal divisor_BD = new BigDecimal(divisor);
BigDecimal result = dividend_BD.divide(divisor_BD).setScale(2, RoundingMode.HALF_UP);
resultStr = result.toString();
}
}catch(Exception e){
System.out.println("dividend = "+ dividend +"; divisor = "+ divisor);
e.printStackTrace();
}*/
//System.out.print("请输入被除数:");double dividend =scanner.nextDouble();
// System.out.print("请输入除数:");double divisor =scanner.nextDouble();
return resultStr;
}
/**
* 判断字符串是否是数字类型
*
* @param str
* @return
*/
public static boolean isNumeric(String str) {
if(org.apache.commons.lang.StringUtils.isNotEmpty(str) ){
Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]*");
// 科学计数法
Pattern pattern2 = Pattern.compile("^[+-]?[\\d]+([.][\\d]*)?([Ee][+-]?[\\d]+)?$");
if (StringUtils.isEmpty(str)) {
return false;
} else {
Matcher isNum = pattern.matcher(str);
Matcher isNum2 = pattern2.matcher(str);
return isNum.matches() || isNum2.matches();
}
}
return false;
}
public static boolean isNumber(String str) {
// Pattern pattern = Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); // 判断小数点后2位的数字的正则表达式
if(org.apache.commons.lang.StringUtils.isNotEmpty(str) ){
String reg = "^(\\-|\\+)?\\d+(\\.\\d+)?$";
Pattern pattern = Pattern.compile(reg);
Matcher match = pattern.matcher(str);
return match.matches();
}
return false;
}
}