- 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;
- }
复制代码 |