import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class MoneyToChinese {
private static String[] digit = { "", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万",
"亿", "拾亿", "佰亿", "仟亿", "万亿" };
private static final String FEN ="分";
private static final String JIAO ="角";
private static final String YUAN ="圆";
private static final String ZHENG ="整";
public static void main(String[] args) {
System.out.println(getMoneyString(1269854896));
}
/**
* 取得数字对应的中文
*
* @param money
* @return
*/
public static String getMoneyString(double money) {
// 将字符串转为为BigDecimal格式
BigDecimal b = new BigDecimal(String.valueOf(money));
// 设置精度为2,小数点后2位
String strMoney = "" + b.setScale(2, BigDecimal.ROUND_UNNECESSARY);
// 按小数点分为 整数 和 小数 两部分
String[] amt = strMoney.split("\\.");
// 调用函数获取 元 和 小数 部分的字符串
strMoney = getYuan(amt[0]) + YUAN + getJIAOFEN(amt[1]);
// 返回最终得到的字符串
return strMoney;
}
/**
* 得到元的部分
*
* @param s
* @return
*/
public static String getYuan(String s) {
char[] c = s.toCharArray();
StringBuffer chSb = new StringBuffer();
int len = c.length;
List list = new ArrayList();
String d = "";
for (int i = 0; i < c.length; i++) {
// 如果有几个0挨在一起时, 只显示一个零即可
if (i > 0 && c[i] == '0' && c[i] == c[i - 1]) {
--len;
continue;
}
// 得到数字对应的中文
chSb.append(getChinese(c[i]));
// 非零时, 显示是几佰, 还是几仟
if (!getChinese(c[i]).equals("零")) {
d = digit[--len];
list.add(d);// 当数字中有万和十万时, 要去掉十万
chSb.append(d);
} else {
--len; // 如果是0则不取位数
}
}
String chStr = chSb.toString();
// 如果同时包含有万和十万, 则将十万中的万去掉
if (list.contains("万") && list.contains("拾万")) {
chStr = chStr.replaceAll("拾万", "拾");
}
if (list.contains("万") && list.contains("佰万")) {
chStr = chStr.replaceAll("佰万", "佰");
}
if (list.contains("万") && list.contains("仟万")) {
chStr = chStr.replaceAll("仟万", "仟");
}
// 如果同时包含亿和十亿, 则将十亿中的亿字去掉
if (list.contains("亿") && list.contains("拾亿")) {
chStr = chStr.replaceAll("拾亿", "拾");
}
if (list.contains("亿") && list.contains("佰亿")) {
chStr = chStr.replaceAll("佰亿", "佰");
}
if (list.contains("亿") && list.contains("仟亿")) {
chStr = chStr.replaceAll("仟亿", "仟");
}
if (list.contains("亿") && list.contains("万亿")) {
chStr = chStr.replaceAll("万亿", "万");
}
// 如果最后一位是 0, 则去掉
if ((chSb.charAt(chSb.length() - 1)) == '零') {
chStr = chStr.substring(0, chStr.length() - 1);
}
return chStr;
}
/**
* 分角转换为字符串
* 例: 25 2角5分
* 02 零2分
* 50 5角
* 00 整
* 0 整
* 2 整
* @param FENJIAO
* @return
*/
private static String getJIAOFEN(String FENJIAO){
// 分角字符串转为为字符数组
char[] ch = FENJIAO.toCharArray();
// 按长度为0,为1,为2 来区分。
if(ch.length==0){
return ZHENG;
}else if(ch.length==1){
if(ch[0]=='0'){
return ZHENG;
}else{
return getChinese(ch[0])+JIAO;
}
}else{
if(ch[0]=='0'&&ch[1]=='0'){
return ZHENG;
}else if(ch[0]=='0'&&ch[1]!='0'){
return getChinese(ch[0])+getChinese(ch[1])+FEN;
}else if(ch[0]!='0'&&ch[1]=='0'){
return getChinese(ch[0])+JIAO;
}else{
return getChinese(ch[0])+JIAO+getChinese(ch[1])+FEN;
}
}
}
/**
* 取得数字对应的中文
* @param i
* @return
*/
private static String getChinese(char i) {
String ch = "";
switch (i) {
case '0':
ch = "零";
break;
case '1':
ch = "壹";
break;
case '2':
ch = "贰";
break;
case '3':
ch = "叁";
break;
case '4':
ch = "肆";
break;
case '5':
ch = "伍";
break;
case '6':
ch = "陆";
break;
case '7':
ch = "柒";
break;
case '8':
ch = "捌";
break;
case '9':
ch = "玖";
break;
}
return ch;
}
}
Java 金额转换
最新推荐文章于 2024-04-14 16:28:19 发布