黑马程序员技术交流社区
标题:
金额转换
[打印本页]
作者:
遇见未来2016
时间:
2016-5-27 12:31
标题:
金额转换
金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾圆整
作者:
遇见未来2016
时间:
2016-5-28 08:47
有人知道吗。。。。。。。
作者:
huburt
时间:
2016-5-28 08:51
public static void main(String[] args) {
System.out.println(changeToCN(101000001010D));
}
public static String changeToCN(double money){
//大写数字
String[] big = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
//段位内的单位
String[] unit = new String[]{"","拾","佰","仟"};
//段位单位
String[] un = new String[]{"","萬","亿"};
//只取2位小数
String value = String.valueOf((long)(money*100));
//整数部分
String iValue = value.substring(0, value.length()-2);
//小数部分
String dValue = value.substring(value.length()-2);
//构造小数部分的大写数字
String dValueSb = "";
//如果两位小数都是0
if(dValue.equals("00")){
//添加“整”字
dValueSb +="整";
//如果小数点后1位是零
}else if(dValue.charAt(0)=='0'){
//添加格式为:零 "几" 分
dValueSb +=big[0]+big[dValue.charAt(1)-'0']+"分";
}else{
//如果小数点后2位都不是零,添加格式为:"几"角 "几"分
dValueSb +=big[dValue.charAt(0)-'0']+"角"+big[dValue.charAt(1)-'0']+"分";
}
//构造整数部分的大写数字
String iValueSb = "";
//将整数部分拆散
char[] iChar = iValue.toCharArray();
// 标志当前位的上一位是否为有效0位(如万位的0对千位无效)
boolean preZero = false;
// 连续出现0的次数
byte zeroTimes = 0;
//对每位数进行操作
for(int i=0;i<iChar.length;i++){
//段位,4位数为一个段位,0段位表示万以下,1段位表示万,2段位表示亿
int dex = (iChar.length-i-1)/4;
//段位内的位置,0代表个,1代表十,2代表百,3代表千
int index = (iChar.length-i-1)%4;
//如果当前位置的数是0
if(iChar[i]=='0'){
//记录前位是0
preZero = true;
//连续出现的0增加1
zeroTimes++;
//段位内个位数是0,只要段位内4位数不全是0,则添加段位单位:万、亿
if(index==0&&zeroTimes<4){
iValueSb +=un[dex];
// 不管上一位是否为0,置为无效0位
preZero = false;
}
}else{
zeroTimes = 0;
// 当出现不是零的数,首先查看上一位是否为有效0位
if (preZero) {
// 添加零,并且只会在此处添加一次零,不会出现重复零
iValueSb += big[0];
//复位
preZero = false;
}
//添加该数字的大写
iValueSb += big[iChar[i]-'0'];
//如果是段位内的个位,添加段位单位:万、亿
if(index==0){
iValueSb +=un[dex];
//如果不是,添加段位内单位:十、百、千
}else{
iValueSb += unit[index];
}
}
}
// 如果整数部分存在,则有圆的字样
if (iValueSb.length() > 0)
iValueSb += '圆';
// 返回拼接起来的值
return iValueSb + dValueSb;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2