博客小子:记录我们对互联网和生活的探索! 注册 | 登陆

我的一个数字转化为人民币大写的java例子

Tags: 数字, 转化, 人民币, 大写, java

中秋节哪儿也别去了,在家省钱!悲剧吧。

看到一个问题:指定一个浮点型的数字,把他转化为人民币大写,表面上看很简单,要做起来还是有点复杂的。

我把这个问题简化了一下:我直接指定一个字符串格式的数字,然后转化为int型,换句话说我不考虑小数的情况,其实加上小数很简单,就不多说了。

例子

 

 

Java代码
  1. import java.util.Arrays;   
  2.   
  3. /**  
  4.  * wayswang  
  5.  * www.blogguy.cn  
  6.  */  
  7.   
  8. /**  
  9.  * @author wayswang *   
  10.  */  
  11. public class Num2Rmb {   
  12.     private String[] hanArr = { "零""壹""贰""叁""肆""伍""陆""柒""捌",   
  13.             "玖" };   
  14.     private String[] unitArr = { "拾""佰""仟" };   
  15.     private String[] unitBigArr = { "万""亿" };   
  16.     private String[] pointArr = { "角""分" };   
  17.   
  18.     /**  
  19.      * 转中文输出  
  20.      * www.blogguy.cn  
  21.      * @param args  
  22.      */  
  23.   
  24.     private String toHanArr(String numStr) {   
  25.         String result = "";   
  26.         int numberLen = numStr.length();   
  27.         int numberBit = 0;   
  28.   
  29.         if (numberLen > 14) {   
  30.             return "不能转换大于万亿(14位)以上的数字";   
  31.         }   
  32.         // 4个数字为一节,先计算一共有几节   
  33.         int numPart = numberLen % 4 == 0 ? numberLen / 4 : numberLen / 4 + 1;   
  34.         // 第一节有几位   
  35.         // 54,8545,8454 则第一节只有两位   
  36.         int firstNumpart = numberLen - (numPart - 1) * 4;   
  37.         // 构造一个数组,存储每一节的数据   
  38.         String[] numPartArr = new String[numPart];   
  39.         int index= -1;   
  40.         for (int j = 0; j < numPartArr.length; j++) {   
  41.             numPartArr[j] = "";   
  42.             if (j == 0) {   
  43.                 // 第一组   
  44.                 numPartArr[j] += numStr.substring(0, firstNumpart);   
  45.             } else {   
  46.                 // 不是第一组数字,应该是4位   
  47.                 numPartArr[j] += numStr.substring(firstNumpart + (j - 1) * 4,   
  48.                         firstNumpart + j * 4);   
  49.             }   
  50.             //转换为中文   
  51.             for (int i = 0; i < numPartArr[j].length(); i++) {   
  52.                 int num = numPartArr[j].charAt(i) - 48;   
  53.                 int numPartLength = numPartArr[j].length();   
  54.                 if (i != numPartLength - 1 && num != 0) {   
  55.                     result += hanArr[num] + unitArr[numPartLength - 2 - i ];   
  56.                 } else {   
  57.                     result += hanArr[num];   
  58.                 }   
  59.             }   
  60.                
  61.             if(numPartArr.length==2&&j==0){   
  62.                 result += unitBigArr[0];   
  63.             }   
  64.             if(numPartArr.length==3&&j==0){   
  65.                 result += unitBigArr[1];   
  66.             }      
  67.             if(numPartArr.length==3&&j==1){   
  68.                 result += unitBigArr[0];   
  69.             }                  
  70.         }   
  71.         return result;   
  72.     }   
  73.   
  74.     public static void main(String args[]) {   
  75.         Num2Rmb nr = new Num2Rmb();   
  76.         System.out.println(nr.toHanArr("95852801421"));   
  77.     }   
  78.   
  79. }  

测试一下

大小: 20.75 K
尺寸: 374 x 152
浏览: 2 次
点击打开新窗口浏览全图

转载请注明来源:www.blogguy.cn

补充一下带小数点的转化方法

 首先定义一个函数把数字分为整数和小数部分,返回一个数组

 

Java代码
  1. /**  
  2.  * 把一个数分解为整数和小数两步,返回一个String类型的数组  
  3.  *  www.blogguy.cn    wayswang 
  4.  * @param args  
  5.  */  
  6. private String[] divide(double num) {   
  7.     long zheng = (long) num;   
  8.     long xiao = Math.round((num - zheng) * 100);   
  9.     return new String[] { zheng + "", xiao + "" };   
  10. }  

 

然后整数部分用上面的函数转化即可,小数部分直接更简单,就不多说了。

记录一下,头脑越来越笨了。

Tags: 数字, 转化, 人民币, 大写, java

« 上一篇:从godaddy转了一个域名到name.com上,记录下步骤 | 下一篇:php的$_FILES函数中type类型的提供、伪造、安全以及实例说明 »

只显示10条记录相关文章

HttpClient 警告信息的删除 (浏览: 3148, 评论: 0)
java得到当前时间 (浏览: 12892, 评论: 2)
netbeans快捷键一览 (浏览: 4883, 评论: 0)
java随机数的说明和例子 (浏览: 3239, 评论: 0)
SWT异常: org.eclipse.swt.SWTException: Invalid threa... (浏览: 4119, 评论: 0)
java使用String.split方法时遇到的问题(转载) (浏览: 8182, 评论: 0)
java ResultSet获得总行数的用法详解 (浏览: 6259, 评论: 1)
SWT事件写法总结 (浏览: 4315, 评论: 0)
Eclipse中"MessageDialog"对话框说明 (浏览: 3868, 评论: 0)
eclipse3.2安装和汉化说明 (浏览: 5997, 评论: 0)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

1条记录访客评论

非常不错,学习了,
我们公司http://www.posuijish.com也是做这一块的

Post by shljzg on 2011, June 22, 1:50 PM 引用此文发表评论 #1


发表评论

评论内容 (必填):