数字操作助手类
1
public
class
NumberHelper
{
2
3 private static Log logger = LogFactory.getLog(NumberHelper.class);
4
5 /** *//**
6 * 将源数字格式化为指定的长度,不足的位数在前面补零,如果长度小于源数字的长度返回原始数字
7 * 适用于在产生指定长度的流水号时使用
8 *
9 * @param source
10 * @return
11 */
12 public static String number2char(int source, int length) {
13 try{
14 String module = new String();
15 for (int i=0; i<length; i++){
16 module += "0";
17 }
18 DecimalFormat format = new DecimalFormat(module);
19 return format.format(source);
20 } catch (Exception e){
21 logger.error("源数字或指定长度非法", e);
22 e.printStackTrace();
23 return null;
24 }
25 }
26
27 /** *//**
28 * 将百分比格式化为数字表示,默认使用四舍五入的算法不舍去小数位数
29 *
30 * @param source 百分比格式的数字
31 * @return
32 */
33 public static Double percent2number(double source){
34 try{
35 BigDecimal big = new BigDecimal(source);
36 return big.divide(new BigDecimal(100)).doubleValue();
37 } catch (Exception e){
38 logger.error("将百分比格式化为数字表示出现错误", e);
39 e.printStackTrace();
40 return null;
41 }
42 }
43
44 /** *//**
45 * 将百分比格式化为数字表示,默认使用四舍五入的算法并保留指定位数的小数
46 *
47 * @param source 百分比格式的数字
48 * @param length 小数位数
49 * @return
50 */
51 public static double percent2number(double source, int length){
52 try{
53 BigDecimal big = new BigDecimal(source);
54 return big.divide(new BigDecimal(100), length, RoundingMode.HALF_UP).doubleValue();
55 } catch (Exception e){
56 logger.error("将百分比格式化为数字表示出现错误", e);
57 e.printStackTrace();
58 return 0;
59 }
60 }
61
62 /** *//**
63 * 将两个数字相除并返回百分格式
64 *
65 * @param dividend 被除数
66 * @param divisor 除数
67 * @return 带%号的字符串
68 */
69 public static String divide2Percent(int dividend, int divisor){
70 return number2percent(divide(dividend, divisor));
71 }
72
73 /** *//**
74 * 将数字格式化为百分比表示
75 *
76 * @param source
77 * @return
78 */
79 public static String number2percent(double source){
80 try{
81 DecimalFormat format = new DecimalFormat("#.##%");
82 return format.format(source);
83 } catch (Exception e){
84 logger.error("将数字格式化为百分比表示出现错误", e);
85 e.printStackTrace();
86 return null;
87 }
88 }
89
90 /** *//**
91 * 两个整数相除保留两位小数
92 *
93 * @param dividend 被除数
94 * @param divisor 除数
95 * @return
96 */
97 public static Double divide(int dividend, int divisor){
98 return divide(dividend, divisor, 2);
99 }
100
101 /** *//**
102 * 两个整数相除保留指定位数的小数
103 *
104 * @param dividend 被除数
105 * @param divisor 除数
106 * @param length 保留小数位数的长度
107 * @return
108 */
109 public static Double divide(int dividend, int divisor, int length){
110 try{
111 if (dividend == 0){
112 return 0D;
113 }
114 BigDecimal big = new BigDecimal(divisor);
115 double d = big.divide(new BigDecimal(dividend), length, RoundingMode.HALF_UP).doubleValue();
116 return d;
117 } catch (Exception e){
118 logger.error("数字相除发生错误", e);
119 e.printStackTrace();
120 return null;
121 }
122 }
123
124 /** *//**
125 * 将double数据保留指定位数的小数
126 * @param length 保留小数位数的长度
127 * @return
128 */
129 public static Double divide(double source, int length){
130 try{
131 if (source == 0){
132 return 0D;
133 }
134 BigDecimal big = new BigDecimal(source);
135 double d = big.setScale(length, RoundingMode.HALF_UP).doubleValue();
136 return d;
137 } catch (Exception e){
138 logger.error("保留指定位数的小数发生错误", e);
139 e.printStackTrace();
140 return null;
141 }
142 }
143
144 /** *//**
145 * 将double数据保留指定位数的小数
146 * @param length 保留小数位数的长度,小数位数不够,以0补全。
147 * 支持科学计算法
148 * @return
149 */
150 public static String divideToString(double source, int length){
151 BigDecimal big = new BigDecimal(source);
152 return big.setScale(length, RoundingMode.HALF_UP).toString();
153 }
154
155 /** *//**
156 * 将String数据保留指定位数的小数
157 * @param length 保留小数位数的长度,小数位数不够,以0补全。
158 * 支持科学计算法
159 * @return
160 */
161 public static String divideToString(String source, int length){
162 BigDecimal big = new BigDecimal(source);
163 return big.setScale(length, RoundingMode.HALF_UP).toString();
164 }
165
166
167 public static void main(String[] args){
168 System.out.print(divideToString("1.23E4",5));
169 }
170}
171
2
3 private static Log logger = LogFactory.getLog(NumberHelper.class);
4
5 /** *//**
6 * 将源数字格式化为指定的长度,不足的位数在前面补零,如果长度小于源数字的长度返回原始数字
7 * 适用于在产生指定长度的流水号时使用
8 *
9 * @param source
10 * @return
11 */
12 public static String number2char(int source, int length) {
13 try{
14 String module = new String();
15 for (int i=0; i<length; i++){
16 module += "0";
17 }
18 DecimalFormat format = new DecimalFormat(module);
19 return format.format(source);
20 } catch (Exception e){
21 logger.error("源数字或指定长度非法", e);
22 e.printStackTrace();
23 return null;
24 }
25 }
26
27 /** *//**
28 * 将百分比格式化为数字表示,默认使用四舍五入的算法不舍去小数位数
29 *
30 * @param source 百分比格式的数字
31 * @return
32 */
33 public static Double percent2number(double source){
34 try{
35 BigDecimal big = new BigDecimal(source);
36 return big.divide(new BigDecimal(100)).doubleValue();
37 } catch (Exception e){
38 logger.error("将百分比格式化为数字表示出现错误", e);
39 e.printStackTrace();
40 return null;
41 }
42 }
43
44 /** *//**
45 * 将百分比格式化为数字表示,默认使用四舍五入的算法并保留指定位数的小数
46 *
47 * @param source 百分比格式的数字
48 * @param length 小数位数
49 * @return
50 */
51 public static double percent2number(double source, int length){
52 try{
53 BigDecimal big = new BigDecimal(source);
54 return big.divide(new BigDecimal(100), length, RoundingMode.HALF_UP).doubleValue();
55 } catch (Exception e){
56 logger.error("将百分比格式化为数字表示出现错误", e);
57 e.printStackTrace();
58 return 0;
59 }
60 }
61
62 /** *//**
63 * 将两个数字相除并返回百分格式
64 *
65 * @param dividend 被除数
66 * @param divisor 除数
67 * @return 带%号的字符串
68 */
69 public static String divide2Percent(int dividend, int divisor){
70 return number2percent(divide(dividend, divisor));
71 }
72
73 /** *//**
74 * 将数字格式化为百分比表示
75 *
76 * @param source
77 * @return
78 */
79 public static String number2percent(double source){
80 try{
81 DecimalFormat format = new DecimalFormat("#.##%");
82 return format.format(source);
83 } catch (Exception e){
84 logger.error("将数字格式化为百分比表示出现错误", e);
85 e.printStackTrace();
86 return null;
87 }
88 }
89
90 /** *//**
91 * 两个整数相除保留两位小数
92 *
93 * @param dividend 被除数
94 * @param divisor 除数
95 * @return
96 */
97 public static Double divide(int dividend, int divisor){
98 return divide(dividend, divisor, 2);
99 }
100
101 /** *//**
102 * 两个整数相除保留指定位数的小数
103 *
104 * @param dividend 被除数
105 * @param divisor 除数
106 * @param length 保留小数位数的长度
107 * @return
108 */
109 public static Double divide(int dividend, int divisor, int length){
110 try{
111 if (dividend == 0){
112 return 0D;
113 }
114 BigDecimal big = new BigDecimal(divisor);
115 double d = big.divide(new BigDecimal(dividend), length, RoundingMode.HALF_UP).doubleValue();
116 return d;
117 } catch (Exception e){
118 logger.error("数字相除发生错误", e);
119 e.printStackTrace();
120 return null;
121 }
122 }
123
124 /** *//**
125 * 将double数据保留指定位数的小数
126 * @param length 保留小数位数的长度
127 * @return
128 */
129 public static Double divide(double source, int length){
130 try{
131 if (source == 0){
132 return 0D;
133 }
134 BigDecimal big = new BigDecimal(source);
135 double d = big.setScale(length, RoundingMode.HALF_UP).doubleValue();
136 return d;
137 } catch (Exception e){
138 logger.error("保留指定位数的小数发生错误", e);
139 e.printStackTrace();
140 return null;
141 }
142 }
143
144 /** *//**
145 * 将double数据保留指定位数的小数
146 * @param length 保留小数位数的长度,小数位数不够,以0补全。
147 * 支持科学计算法
148 * @return
149 */
150 public static String divideToString(double source, int length){
151 BigDecimal big = new BigDecimal(source);
152 return big.setScale(length, RoundingMode.HALF_UP).toString();
153 }
154
155 /** *//**
156 * 将String数据保留指定位数的小数
157 * @param length 保留小数位数的长度,小数位数不够,以0补全。
158 * 支持科学计算法
159 * @return
160 */
161 public static String divideToString(String source, int length){
162 BigDecimal big = new BigDecimal(source);
163 return big.setScale(length, RoundingMode.HALF_UP).toString();
164 }
165
166
167 public static void main(String[] args){
168 System.out.print(divideToString("1.23E4",5));
169 }
170}
171