java实现整数转化为中文大写金额的方法

 更新时间:2015年12月30日 11:22:14   作者:xiaojimanman  
这篇文章主要介绍了java实现整数转化为中文大写金额的方法,感兴趣的小伙伴们可以参考一下

在日常生活中,我们经常会将阿拉伯数字转化为中文大写的情况:"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾", "佰", "仟", "万", "亿",因此自己就编写一个类,实现该功能的转化。
实现过程:
对于这个问题的实现,我们首先把数字按四位一个拆开(符合我们读数字的习惯),然后对这四位数,做出他的读法,具体代码如下:

private static String getNumberStr1000 (int num) { 
 if (num > 9999 || num < 0) { 
  return ""; 
 } 
 int q = num / 1000; 
 int b = (num / 100) % 10; 
 int s = (num / 10) % 10; 
 int g = num % 10; 
 StringBuffer sb = new StringBuffer(); 
 //千 
 if (q > 0) { 
  sb.append(NUMBER1[q]); 
  sb.append(NUMBER2[3]); 
 } 
 //百 
 if (b > 0) { 
  sb.append(NUMBER1[b]); 
  sb.append(NUMBER2[2]); 
 } else { 
  if (q != 0) { 
   sb.append(NUMBER2[0]); 
  } 
 } 
 //十 
 if (s > 0) { 
  sb.append(NUMBER1[s]); 
  sb.append(NUMBER2[1]); 
 } else { 
  if (b != 0) { 
   sb.append(NUMBER2[0]); 
  } 
 } 
 //个 
 if (g > 0) { 
  sb.append(NUMBER1[g]); 
 } 
 return sb.toString(); 
} 

下面我们只需要在编写一个方法,实现每个四位数的读法以及对应的单位即可,具体代码如下:

public static String getNumberStr(int num) { 
 if (num < 0) { 
  return ""; 
 } 
 if (num == 0) { 
  return NUMBER1[0]; 
 } 
 int split = 10000; 
 int y = num / (split * split); 
 int w = (num / split) % split; 
 int g = num % split; 
 StringBuffer sb = new StringBuffer(); 
 //亿 
 if (y > 0) { 
  sb.append(getNumberStr1000(y)); 
  sb.append(NUMBER2[5]); 
 } 
 //万 
 if (w > 999) { 
  sb.append(getNumberStr1000(w)); 
  sb.append(NUMBER2[4]); 
 } else { 
  if (w > 0) { 
   if (y != 0) { 
    sb.append(NUMBER2[0]); 
   } 
   sb.append(getNumberStr1000(w)); 
   sb.append(NUMBER2[4]); 
  } 
 } 
 //万以下 
 if (g > 0) { 
  if (w != 0) { 
   if (g > 999) { 
    sb.append(getNumberStr1000(g)); 
   } else { 
    sb.append(NUMBER2[0]); 
    sb.append(getNumberStr1000(g)); 
   } 
    
  } else { 
   if (y != 0) { 
    sb.append(NUMBER2[0]); 
   } 
   sb.append(getNumberStr1000(g)); 
  } 
 } 
 return sb.toString(); 
} 

完整源代码:

 /** 
 *@Description:  
 */ 
package com.lulei.util; 
 
public class NumberUtil { 
 private static String[] NUMBER1 = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; 
 private static String[] NUMBER2 = {"零", "拾", "佰", "仟", "万", "亿"}; 
  
 /** 
  * @param num 
  * @return 
  * @Author:lulei 
  * @Description:将数字转化为大写 
  */ 
 public static String getNumberStr(int num) { 
  if (num < 0) { 
   return ""; 
  } 
  if (num == 0) { 
   return NUMBER1[0]; 
  } 
  int split = 10000; 
  int y = num / (split * split); 
  int w = (num / split) % split; 
  int g = num % split; 
  StringBuffer sb = new StringBuffer(); 
  //亿 
  if (y > 0) { 
   sb.append(getNumberStr1000(y)); 
   sb.append(NUMBER2[5]); 
  } 
  //万 
  if (w > 999) { 
   sb.append(getNumberStr1000(w)); 
   sb.append(NUMBER2[4]); 
  } else { 
   if (w > 0) { 
    if (y != 0) { 
     sb.append(NUMBER2[0]); 
    } 
    sb.append(getNumberStr1000(w)); 
    sb.append(NUMBER2[4]); 
   } 
  } 
  //万以下 
  if (g > 0) { 
   if (w != 0) { 
    if (g > 999) { 
     sb.append(getNumberStr1000(g)); 
    } else { 
     sb.append(NUMBER2[0]); 
     sb.append(getNumberStr1000(g)); 
    } 
     
   } else { 
    if (y != 0) { 
     sb.append(NUMBER2[0]); 
    } 
    sb.append(getNumberStr1000(g)); 
   } 
  } 
  return sb.toString(); 
 } 
  
 /** 
  * @param num 
  * @return 
  * @Description:对万以下的数字进行大小写转化 
  */ 
 private static String getNumberStr1000 (int num) { 
  if (num > 9999 || num < 0) { 
   return ""; 
  } 
  int q = num / 1000; 
  int b = (num / 100) % 10; 
  int s = (num / 10) % 10; 
  int g = num % 10; 
  StringBuffer sb = new StringBuffer(); 
  //千 
  if (q > 0) { 
   sb.append(NUMBER1[q]); 
   sb.append(NUMBER2[3]); 
  } 
  //百 
  if (b > 0) { 
   sb.append(NUMBER1[b]); 
   sb.append(NUMBER2[2]); 
  } else { 
   if (q != 0) { 
    sb.append(NUMBER2[0]); 
   } 
  } 
  //十 
  if (s > 0) { 
   sb.append(NUMBER1[s]); 
   sb.append(NUMBER2[1]); 
  } else { 
   if (b != 0) { 
    sb.append(NUMBER2[0]); 
   } 
  } 
  //个 
  if (g > 0) { 
   sb.append(NUMBER1[g]); 
  } 
  return sb.toString(); 
 } 
 
 public static void main(String[] args) { 
  // TODO Auto-generated method stub 
  int i = 1; 
  System.out.println(i + "--" + NumberUtil.getNumberStr(i)); 
  i = 1001; 
  System.out.println(i + "--" + NumberUtil.getNumberStr(i)); 
  i = 100101; 
  System.out.println(i + "--" + NumberUtil.getNumberStr(i)); 
  i = 10100101; 
  System.out.println(i + "--" + NumberUtil.getNumberStr(i)); 
  i = 1234567890; 
  System.out.println(i + "--" + NumberUtil.getNumberStr(i)); 
 } 
 
}

 测试运行结果:

希望本文所述对大家学习java程序设计有所帮助。

相关文章

  • 使用Sqlserver事务发布实现数据同步(sql2008)

    使用Sqlserver事务发布实现数据同步(sql2008)

    事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案,所以有机会再次研究一下它以及快照等,发现还是有很多不错的功能和改进的。这里以sqlserver2008的事务发布功能为例,对发布订阅的方式简要介绍一下操作流程,一方面做个总结备份,一方面与大家进行一下分享和交流
    2013-03-03
  • sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解

    sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解

    这篇文章主要介绍了sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解,需要的朋友可以参考下
    2017-05-05
  • SQL server 2008不允许保存更改的完美解决办法(图解)

    SQL server 2008不允许保存更改的完美解决办法(图解)

    我重装系统后就安装了SQL Server2008R2,第一次使用时在修改表结构的时候经碰到这样一个警告【不允许保存更改。您所做的更改要求删除并重新创建以下表.对这样的错误提示怎么解决呢?下面小编通过图文并茂的形式给大家分享解决办法
    2017-01-01
  • 设置sql server 2008 r2的身份验证模式的图文教程

    设置sql server 2008 r2的身份验证模式的图文教程

    很多朋友在安装sql server2008r2的时候,选择了Windows身份验证模式,现在想把它改为sql server验证模式,不知道怎么修改的,接下来小编给大家分享一篇图文教程帮助大家解决此问题,需要的朋友参考下吧
    2017-01-01
  • SQL Server 2008 新特性 总结复习(一)

    SQL Server 2008 新特性 总结复习(一)

    写这篇文章,主要是总结最近学到的一些新知识,这些特性不一定是SQLSERVER最新版才有,大多数是2008新特性,有些甚至是更早。如果有不懂的地方,建议大家去百度谷歌搜搜,本文不做详细阐述,有错误的地方,欢迎大家批评指正
    2012-07-07
  • SQL SERVER 2008数据库引擎详细介绍

    SQL SERVER 2008数据库引擎详细介绍

    SQL Server 的数据库引擎组件是用于存储、处理数据和保证数据安全的核心服务。数据库引擎提供受控的访问和快速事务处理,以满足企业中要求极高、大量使用数据的应用程序的要求
    2012-11-11
  • SQL server 2008 数据安全(备份和恢复数据库)

    SQL server 2008 数据安全(备份和恢复数据库)

    备份和恢复数据库对于数据库管理员来说是保证数据安全性的一项重要工作。SQL server 2008提供了高性能的备份和恢复功能,可以实现多种方式的数据库备份和恢复操作,避免了由于各种故障造成的损失而丢失数据
    2012-08-08
  • sqlserver多版本查看版本号

    sqlserver多版本查看版本号

    有人问我sqlserver怎么查看版本号呢?下面给大家整理了一些SQL Server版本号查看sql语句,可以查看SQL Server 2000 、2005 、2008版本号
    2013-11-11
  • SQL Server 2000向SQL Server 2008 R2推送数据图文教程

    SQL Server 2000向SQL Server 2008 R2推送数据图文教程

    这篇文章主要介绍了SQL Server 2000向SQL Server 2008 R2推送数据图文教程,本文步骤详细,配图清晰,需要的朋友可以参考下
    2014-09-09
  • SQLServer搭建网站实例详解

    SQLServer搭建网站实例详解

    这篇文章主要介绍了SQLServer搭建网站实例详解,文中通过图片解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论