知识大全 Java转换大写金额的代码

Posted

篇首语:人间有三愿,一愿识尽世间好人,二愿读尽世间好书,三愿看尽世间好风光。人间最美四月天,祝你三愿皆有所获。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java转换大写金额的代码相关的知识,希望对你有一定的参考价值。

Java转换大写金额的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  此代码根据网上搜集到的部分代码进行修改 使得输出准确完整

  package PrintOperate;

  import java text NumberFormat;    import java util HashMap;

  public class SimpleMoneyFormat   

  public static final String EMPTY = ;        public static final String ZERO = 零 ;        public static final String ONE = 壹 ;        public static final String O = 贰 ;        public static final String THREE = 三 ;        public static final String FOUR = 肆 ;        public static final String FIVE = 伍 ;        public static final String SIX = 陆 ;        public static final String SEVEN = 柒 ;        public static final String EIGHT = 捌 ;        public static final String NINE = 玖 ;        public static final String TEN = 拾 ;        public static final String HUNDRED = 佰 ;        public static final String THOUSAND = 仟 ;        public static final String TEN_THOUSAND = 万 ;        public static final String HUNDRED_MILLION = 亿 ;        public static final String YUAN = 元 ;        public static final String JIAO = 角 ;        public static final String FEN = 分 ;        public static final String DOT = ;        private static SimpleMoneyFormat formatter = null;        private HashMap chineseNumberMap = new HashMap();        private HashMap chineseMoneyPattern = new HashMap();        private NumberFormat numberFormat = NumberFormat getInstance();

  private SimpleMoneyFormat()                    numberFormat setMaximumFractionDigits( );            numberFormat setMinimumFractionDigits( );            numberFormat setGroupingUsed(false);

  chineseNumberMap put( ZERO);            chineseNumberMap put( ONE);            chineseNumberMap put( O);            chineseNumberMap put( THREE);            chineseNumberMap put( FOUR);            chineseNumberMap put( FIVE);            chineseNumberMap put( SIX);            chineseNumberMap put( SEVEN);            chineseNumberMap put( EIGHT);            chineseNumberMap put( NINE);            chineseNumberMap put(DOT DOT);

  chineseMoneyPattern put( TEN);            chineseMoneyPattern put( HUNDRED);            chineseMoneyPattern put( THOUSAND);            chineseMoneyPattern put( TEN_THOUSAND);            chineseMoneyPattern put( TEN);            chineseMoneyPattern put( HUNDRED);            chineseMoneyPattern put( THOUSAND);            chineseMoneyPattern put( HUNDRED_MILLION);       

  public static SimpleMoneyFormat getInstance()                    if (formatter == null)                            formatter = new SimpleMoneyFormat();                        return formatter;       

  public String format(String moneyStr)                    checkPrecision(moneyStr);            String result;            result = convertToChineseNumber(moneyStr);            result = addUnitsToChineseMoneyString(result);            return result;       

  public String format(double moneyDouble)                    return format(numberFormat format(moneyDouble));       

  public String format(int moneyInt)                    return format(numberFormat format(moneyInt));       

  public String format(long moneyLong)                    return format(numberFormat format(moneyLong));       

  public String format(Number moneyNum)                    return format(numberFormat format(moneyNum));       

  private String convertToChineseNumber(String moneyStr)                    String result;            StringBuffer cMoneyStringBuffer = new StringBuffer();            for (int i = ; i < moneyStr length(); i++)                            cMoneyStringBuffer append(chineseNumberMap get(moneyStr substring(i i + )));                        //拾佰仟万亿等都是汉字里面才有的单位 加上它们            int indexOfDot = cMoneyStringBuffer indexOf(DOT);            int moneyPatternCursor = ;            for (int i = indexOfDot ; i > ; i )                            cMoneyStringBuffer insert(i chineseMoneyPattern get(EMPTY + moneyPatternCursor));                moneyPatternCursor = moneyPatternCursor == ? : moneyPatternCursor + ;           

  String fractionPart = cMoneyStringBuffer substring(cMoneyStringBuffer indexOf( ));            cMoneyStringBuffer delete(cMoneyStringBuffer indexOf( ) cMoneyStringBuffer length());            while (cMoneyStringBuffer indexOf( 零拾 ) != )                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零拾 ) cMoneyStringBuffer indexOf( 零拾 ) + ZERO);                        while (cMoneyStringBuffer indexOf( 零佰 ) != )                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零佰 ) cMoneyStringBuffer indexOf( 零佰 ) + ZERO);                        while (cMoneyStringBuffer indexOf( 零仟 ) != )                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零仟 ) cMoneyStringBuffer indexOf( 零仟 ) + ZERO);                        while (cMoneyStringBuffer indexOf( 零万 ) != )                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零万 ) cMoneyStringBuffer indexOf( 零万 ) + TEN_THOUSAND);                        while (cMoneyStringBuffer indexOf( 零亿 ) != )                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零亿 ) cMoneyStringBuffer indexOf( 零亿 ) + HUNDRED_MILLION);                        while (cMoneyStringBuffer indexOf( 零零 ) != )                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零零 ) cMoneyStringBuffer indexOf( 零零 ) + ZERO);                        if (cMoneyStringBuffer lastIndexOf(ZERO) == cMoneyStringBuffer length() )                            cMoneyStringBuffer delete(cMoneyStringBuffer length() cMoneyStringBuffer length());                        cMoneyStringBuffer append(fractionPart);

  result = cMoneyStringBuffer toString();            return result;       

  private String addUnitsToChineseMoneyString(String moneyStr)                    String result;            StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);            int indexOfDot = cMoneyStringBuffer indexOf(DOT);            cMoneyStringBuffer replace(indexOfDot indexOfDot + YUAN);            cMoneyStringBuffer insert(cMoneyStringBuffer length() JIAO);            cMoneyStringBuffer insert(cMoneyStringBuffer length() FEN);            if (cMoneyStringBuffer indexOf( 零角零分 ) != )//没有零头 加整                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零角零分 ) cMoneyStringBuffer length() 整 );                        else if (cMoneyStringBuffer indexOf( 零分 ) != )//没有零分 不输出零分 也不加整                            cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零分 ) cMoneyStringBuffer length() );                        else if (cMoneyStringBuffer indexOf( 零角 ) != )                            if(cMoneyStringBuffer indexOf( 零角 )==(cMoneyStringBuffer length() ))                                    cMoneyStringBuffer replace(cMoneyStringBuffer indexOf( 零角 ) cMoneyStringBuffer indexOf( 零角 ) + ZERO);                                else                                    cMoneyStringBuffer delete(cMoneyStringBuffer indexOf( 零角 ) cMoneyStringBuffer indexOf( 零角 ) + );                                        result = cMoneyStringBuffer toString();            return result;       

  private void checkPrecision(String moneyStr)                    int fractionDigits = moneyStr length() moneyStr indexOf(DOT) ;            if (fractionDigits > )                            throw new RuntimeException( 金额 + moneyStr + 的小数位多于两位 ); //精度不能比分低                   

cha138/Article/program/Java/hx/201311/26854

相关参考