网上转账时,易发现大部分银行的网银系统都提供了类似这样的功能,即:当用户在输入转账金额数字时,下面会有个显示框用于同步显示该金额对应的大写形式,如输入:“6109.23”,则对应显示的金额大写为:“陆仟壹佰零玖元贰角叁分”。下面就贴上实现此转换功能的简单java代码,注意:该程序只支持到“万亿”级。
view plaincopy to clipboardprint? ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150 /** * CrazyItTest * 将金额转换成人民币大写形式 * */ package com.labci.java.array; /** * @author Bill Tu(tujiyue/iwtxokhtd) * May 15, 2011[7:41:57 PM] * */ public class ConvertFloatNumToRMBFormat { private String [] upperCaseArray={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; private String [] moneyUnitArray={"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"}; private String [] decimalArray={"角","分"}; private String []getDividedStringNum(double num){ long integerData=(long)num; long decialData=Math.round((num-integerData)*100); String decialString=String.valueOf(decialData); if(decialData<10){ decialString="0"+decialData; } return new String[]{String.valueOf(integerData),decialString}; } private String getIntegerStr(String integerStr){ String result=""; int numLength=integerStr.length(); if(numLength>13){ System.out.println("超出本程序的金额范围"); }else{ for(int i=0;i<numLength;i++){ int num=integerStr.charAt(i)-48; if(num!=0){ result+=upperCaseArray[num]+moneyUnitArray[numLength-i-1]; }else{ result+=upperCaseArray[num]; } } } return result; } private String getDecimalStr(String decimalStr){ String result=""; if(null!=decimalStr&& !"".equals(decimalStr)){ int allNum=Integer.parseInt(decimalStr); if(allNum>0){ int numLength=decimalStr.length(); for(int i=0;i<numLength;i++){ int num=decimalStr.charAt(i)-48; if(num!=0){ result+=upperCaseArray[num]+decimalArray[i]; }else{ if(i<1){ result+=upperCaseArray[num]; } } } } } return result; } private String getConvertedString(double moneyData){ String []getDividedStringNumArray=getDividedStringNum(moneyData); String integerStr=getDividedStringNumArray[0]; String result=getIntegerStr(integerStr); if(null!=result && !"".equals(result)){ if(getDividedStringNumArray.length>1){ String decimalStr=getDividedStringNumArray[1]; result+=getDecimalStr(decimalStr); } } return result; } /** * @param args */ public static void main(String[] args) { ConvertFloatNumToRMBFormat nr=new ConvertFloatNumToRMBFormat(); double moneyData=132210216109.11; System.out.println(nr.getConvertedString(moneyData)); } }
壹仟叁佰贰拾贰亿壹仟零贰拾壹万陆仟壹佰零玖元壹角壹分