我就废话不多说了,大家还是直接看代码吧~
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