`

java当中金额数字转中文大写

    博客分类:
  • Java
阅读更多

处理能力:
整数部分:9999999999999999(16位长,仟万亿)
小数部分:3位,多于3位舍去(不做四舍五入)

运行结果:
1.23 壹元贰角叁分
1234567890123456.123 壹仟贰佰叁拾肆万伍仟陆佰柒拾捌亿玖仟零壹拾贰万叁仟肆佰伍拾陆元壹角贰分叁厘
0.0798 柒分玖厘
10,001,000.09 壹仟万零壹仟元玖分
01.107700 壹元壹角柒厘

public   class  MoneyUtil {

  
/**  大写数字  */
  
private   static   final  String[] NUMBERS  =  {  " " " " " " " " " " " " " " ,
      
" " " " " "  };
  
/**  整数部分的单位  */
  
private   static   final  String[] IUNIT  =  {  " " " " " " " " " " " " " " ,
      
" " " 亿 " " " " " " " " " " " " " " "  };
  
/**  小数部分的单位  */
  
private   static   final  String[] DUNIT  =  {  " " " " " "  };

  
/**
   * 得到大写金额。
   
*/
  
public   static  String toChinese(String str) {
    str 
=  str.replaceAll( " , " "" ); //  去掉","
    String integerStr; //  整数部分数字
    String decimalStr; //  小数部分数字

    
//  初始化:分离整数部分和小数部分
     if  (str.indexOf( " . " >   0 ) {
      integerStr 
=  str.substring( 0 , str.indexOf( " . " ));
      decimalStr 
=  str.substring(str.indexOf( " . " +   1 );
    } 
else   if  (str.indexOf( " . " ==   0 ) {
      integerStr 
=   "" ;
      decimalStr 
=  str.substring( 1 );
    } 
else  {
      integerStr 
=  str;
      decimalStr 
=   "" ;
    }
    
//  integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
     if  ( ! integerStr.equals( "" )) {
      integerStr 
=  Long.toString(Long.parseLong(integerStr));
      
if  (integerStr.equals( " 0 " )) {
        integerStr 
=   "" ;
      }
    }
    
//  overflow超出处理能力,直接返回
     if  (integerStr.length()  >  IUNIT.length) {
      System.out.println(str 
+   " :超出处理能力 " );
      
return  str;
    }

    
int [] integers  =  toArray(integerStr); //  整数部分数字
     boolean  isMust5  =  isMust5(integerStr); //  设置万单位
     int [] decimals  =  toArray(decimalStr); //  小数部分数字
     return  getChineseInteger(integers, isMust5)  +  getChineseDecimal(decimals);
  }

  
/**
   * 整数部分和小数部分转换为数组,从高位至低位
   
*/
  
private   static   int [] toArray(String number) {
    
int [] array  =   new   int [number.length()];
    
for  ( int  i  =   0 ; i  <  number.length(); i ++ ) {
      array[i] 
=  Integer.parseInt(number.substring(i, i  +   1 ));
    }
    
return  array;
  }

  
/**
   * 得到中文金额的整数部分。
   
*/
  
private   static  String getChineseInteger( int [] integers,  boolean  isMust5) {
    StringBuffer chineseInteger 
=   new  StringBuffer( "" );
    
int  length  =  integers.length;
    
for  ( int  i  =   0 ; i  <  length; i ++ ) {
      
//  0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
      
//  特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
      String key  =   "" ;
      
if  (integers[i]  ==   0 ) {
        
if  ((length  -  i)  ==   13 ) //  万(亿)(必填)
          key  =  IUNIT[ 4 ];
        
else   if  ((length  -  i)  ==   9 ) //  亿(必填)
          key  =  IUNIT[ 8 ];
        
else   if  ((length  -  i)  ==   5   &&  isMust5) //  万(不必填)
          key  =  IUNIT[ 4 ];
        
else   if  ((length  -  i)  ==   1 ) //  元(必填)
          key  =  IUNIT[ 0 ];
        
//  0遇非0时补零,不包含最后一位
         if  ((length  -  i)  >   1   &&  integers[i  +   1 !=   0 )
          key 
+=  NUMBERS[ 0 ];
      }
      chineseInteger.append(integers[i] 
==   0   ?  key
          : (NUMBERS[integers[i]] 
+  IUNIT[length  -  i  -   1 ]));
    }
    
return  chineseInteger.toString();
  }

  
/**
   * 得到中文金额的小数部分。
   
*/
  
private   static  String getChineseDecimal( int [] decimals) {
    StringBuffer chineseDecimal 
=   new  StringBuffer( "" );
    
for  ( int  i  =   0 ; i  <  decimals.length; i ++ ) {
      
//  舍去3位小数之后的
       if  (i  ==   3 )
        
break ;
      chineseDecimal.append(decimals[i] 
==   0   ?   ""
          : (NUMBERS[decimals[i]] 
+  DUNIT[i]));
    }
    
return  chineseDecimal.toString();
  }

  
/**
   * 判断第5位数字的单位"万"是否应加。
   
*/
  
private   static   boolean  isMust5(String integerStr) {
    
int  length  =  integerStr.length();
    
if  (length  >   4 ) {
      String subInteger 
=   "" ;
      
if  (length  >   8 ) {
        
//  取得从低位数,第5到第8位的字串
        subInteger  =  integerStr.substring(length  -   8 , length  -   4 );
      } 
else  {
        subInteger 
=  integerStr.substring( 0 , length  -   4 );
      }
      
return  Integer.parseInt(subInteger)  >   0 ;
    } 
else  {
      
return   false ;
    }
  }

  
public   static   void  main(String[] args) {
    String number 
=   " 1.23 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 1234567890123456.123 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 0.0798 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 10,001,000.09 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 01.107700 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
  }

}
分享到:
评论

相关推荐

    Java人民币金额数字转换成大写

    在 Java 中,将人民币金额数字转换成大写需要使用 HashMap 来存储中文数字和人民币金额的对应关系。例如,数字 1 对应中文数字 "壹",数字 2 对应中文数字 "贰",以此类推。 在 SimpleMoneyFormat 类中,我们首先...

    java将数字转换成大写字母

    Java 中实现数字金额到中文大写字符的转换 Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字...

    java实现数字转换人民币中文大写工具

    Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...

    java 正则数字金额转换为大写

    输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...

    JAVA实现阿拉伯数字金额转汉语大写.doc

    "JAVA实现阿拉伯数字金额转汉语大写" JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义...

    将数字转为中文金额的大写方式(Java版)

    将数字转为中文金额的大写方式(Java版) 博文链接:https://lovinchan.iteye.com/blog/202768

    Java数字金额转大写

    将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。

    java 实现 金额转成中文大写形式

    在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...

    java 类 金额转换成大写

    Java 类金额转换成大写 在 Java 编程语言中,金额转换成大写是非常有用的功能,特别是在财务、银行、电子商务等领域中。下面我们来详细介绍如何使用 Java 实现金额转换成大写的功能。 实例代码分析 首先,我们来...

    Android中数字转中文,金额转大写

    本文将深入探讨如何在Android环境中实现这一功能,包括数字转中文以及数字金额转大写,并且会涉及到口语化的转换。 首先,数字转中文主要是将阿拉伯数字(如1、2、3等)转换成中文数字(如一、二、三等)。在Java或...

    数字金额转英文大写金额(包括小数)

    最好放在公共方法里,以便调用,定义String 类型接受返回的金额,调用参数为需要传入的金额

    人民币小写金额转大写金额(java版)

    ### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...

    java 金额转大写工具类

    可以把金额数值转为财务上常用的金额大写,如100元 转为壹佰园

    将阿拉伯数字转换为金额的汉字大写

    本文将深入探讨如何使用Java来实现阿拉伯数字到金额汉字大写的转换。 首先,我们需要了解金额汉字大写的基本规则。在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌...

    java数字转成大写金额

    小数都可以,这个真不错,赶紧下载来看看吧

    Java编程-金额小写转大写

    通过理解数字到大写汉字的映射规则,以及编写相应的转换函数,我们可以实现符合财务规范的金额显示。而`GetAmount.java`文件提供了一个实现这一功能的起点,开发者可以根据实际需求对其进行扩展和完善。

    java阿拉伯数字转大写金额+大写金额转阿拉伯数字

    在Java编程中,将阿拉伯数字转换为大写金额以及将大写金额转换回阿拉伯数字是常见的财务处理需求。这些操作通常用于财务报表、发票或银行系统中,以确保数据的准确性和一致性。以下是对这个主题的详细解释: 一、...

    Java将数字金额转为大写中文金额

    Java程序实现数字金额转为大写中文金额,是一项常见的编程任务,尤其在金融行业以及需要处理财务数据的软件中应用广泛。其核心功能是将阿拉伯数字表示的金额转换成中文大写形式,以满足财务凭证、支票、合同等文档中...

    JAVA实现金额转换大写

    通过这样的Java实现,我们能够轻松地将金额数字转换为大写汉字,满足各种财务报表和数据处理的需求。当然,实际的项目中还可能需要考虑性能优化,特别是对于大数据量的转换,可以考虑使用流式处理或者多线程等技术来...

    数字转换为大写(JAVA)

    - 使用`+`运算符将构建好的字符串拼接起来,形成最终的大写中文金额。 5. **异常处理与用户交互**: - 如果用户输入的数值超出规定范围,程序会提示用户重新输入,体现了错误处理和用户交互的机制。 6. **字符串...

Global site tag (gtag.js) - Google Analytics