我就廢話不多說了,大家還是直接看代碼吧~
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
|
public static void main(String[] args) { // 具體的金額(單位元) String value = "88000067898" ; BigDecimal bigDecimal = new BigDecimal(value); // 轉換為萬元(除以10000) BigDecimal decimal = bigDecimal.divide( new BigDecimal( "10000" )); // 保留兩位小數 DecimalFormat formater = new DecimalFormat( "0" ); // 四舍五入 formater.setRoundingMode(RoundingMode.HALF_UP); // 格式化完成之后得出結果 String formatNum = formater.format(decimal); System.out.println(formatNum); } /**元轉萬元且四舍五入取整*/ public static String getNumberWan(String value) { BigDecimal bigDecimal = new BigDecimal(value); // 轉換為萬元(除以10000) BigDecimal decimal = bigDecimal.divide( new BigDecimal( "10000" )); // 保留兩位小數 DecimalFormat formater = new DecimalFormat( "0" ); // 四舍五入 formater.setRoundingMode(RoundingMode.HALF_UP); // 格式化完成之后得出結果 String rs = formater.format(decimal); return rs; } /**元轉萬元且保留兩位小數并四舍五入*/ public static String getNumberWanTwo(String value) { BigDecimal bigDecimal = new BigDecimal(value); // 轉換為萬元(除以10000) BigDecimal decimal = bigDecimal.divide( new BigDecimal( "10000" )); // 保留兩位小數 DecimalFormat formater = new DecimalFormat( "0" ); // 四舍五入 formater.setRoundingMode(RoundingMode.HALF_UP); // 格式化完成之后得出結果 String rs = formater.format(decimal); return rs; } |
補充:用java實現將金額由數字轉為中文的數字金額
寫一個金額由數字轉為中文的數字金額
例如:
123123.12轉為壹拾貳萬叁仟壹佰貳拾叁元壹角貳分
由于是從開發過程中代碼直接copy過來的,有一部分可以忽略,新人剛剛工作,寫的不好,請多指正
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
|
import java.util.Scanner; public class Test { //數字單位 private static final String[] NUMBERS_UNITS= { "拾" , "佰" , "仟" , "萬" }; public static void main(String[] args) { Test st= new Test(); Scanner scanner= new Scanner(System.in); System.out.println( "請輸入金額:" ); //獲取前端傳遞過來的金額數字 String money=scanner.nextLine(); //1.判斷是否為null st.isNull(money); //2.判斷是否有非法字符 st.isIllegal(money); //3.判斷是否超過限額 String[] array=st.isBeyondMax(money); //4.整數位字符轉換 StringBuffer chineseInt=st.convertInt(array[ 0 ]); //5.判斷有無小數位 if (array.length== 2 ) { //6.有則進行小數位字符轉換 StringBuffer chineseDec=st.convertDec(array[ 1 ]); //7.拼接整數和小數位 chineseInt=chineseInt.append(chineseDec); } //8.將轉為大寫的金額設置回總線 System.out.println(chineseInt); } /** * 將小數位的金額數字轉化為中文大寫 * @param string 金額數字 * @return 轉為中文的金額數字 */ private StringBuffer convertDec(String string) { StringBuffer str=convert(string); switch (str.length()) { case 1 : str.append( "角" ); break ; case 2 : str.append( "分" ); str.insert( 1 , "角" ); break ; } return str; } /** * 將整數位的金額數字對應轉化為中文大寫 * @param string 金額數字 * @return 轉為中文的金額數字 */ private StringBuffer convertInt(String string) { StringBuffer str=convert(string); int length=str.length()- 1 ; for ( int i = 0 ,j=str.length()- 1 ; i < length; i++,j--) { int v=i% 4 ; System.out.println( "i:" +i+ " j:" +j+ " v:" +v+ " " +str.toString()); str.insert(j, NUMBERS_UNITS[v]); } str.append( "元" ); return str; } /** * 循環整個字符串,替換字符 * @param string 要替換的字符串 * @return 替換好的字符 */ private StringBuffer convert(String string) { StringBuffer str= new StringBuffer(string); for ( int i = 0 ; i < str.length(); i++) { str.replace(i, i+ 1 ,replaceCharacter(str.substring(i, i+ 1 ))); } return str; } /** * 將給定的數字字符替換為對應的中文數字字符 * @param string 數字字符 * @return 中文數字字符 */ private String replaceCharacter(String string) { switch (string) { case "0" : string= "零" ; break ; case "1" : string= "壹" ; break ; case "2" : string= "貳" ; break ; case "3" : string= "叁" ; break ; case "4" : string= "肆" ; break ; case "5" : string= "伍" ; break ; case "6" : string= "陸" ; break ; case "7" : string= "柒" ; break ; case "8" : string= "捌" ; break ; case "9" : string= "玖" ; break ; } return string; } /** * 檢測傳入金額字符是否為空 * @param money 金額字符 */ private void isNull(String money) { if (money == null ) { //拋出異常 } } /** * 檢測傳入金額字符是否符合條件 * @param money 金額字符 */ private void isIllegal(String money) { if (!money.matches( "\\d+.?\\d*" )) { //拋出異常 } } /** * 檢測傳入金額字符是否超出最大值 * @param money 金額字符 * @return 返回拆分的金額數字 */ private String[] isBeyondMax(String money) { String[] array=money.split( "\\." ); //整數位不能超過9位,小數位不能超過2為 if (array[ 0 ].length()> 9 || (array.length> 1 &&array[ 1 ].length()> 2 )) { //拋出異常 } return array; } } |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。如有錯誤或未考慮完全的地方,望不吝賜教。
原文鏈接:https://blog.csdn.net/qiucheng_198806/article/details/88837186