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

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

167

168

169

170

171
