金额的大写转换

决定要做一个家庭财务记账的小软件,正在段准备阶段,昨天从网上看了一些C++的关于金额大写的转换,我只是用java改写了一下,想熟悉一下算法,已经好久没有编程了,静下心来做已经很难了.
做毕业设计那会,天天java api找了好多次,现在可能连hellworld也做不出来了,人正在一点点地颓废
不想颓废 所以有的时候还是要一点点看看的

ContractedBlock.gif ExpandedBlockStart.gif
 1 public class Money {
 2     public String convertBigMoney(double dMoney) {
 3         String strMoney = "" + dMoney;
 4         String strUnit = "元拾佰仟万拾佰仟亿拾佰仟";
 5         String strNumber = "零壹贰叁肆伍陆柒捌玖";
 6         String strOtherUnit = "整角分";
 7         String strReturnValue = "";
 8         int nLength = strMoney.length();
 9         int nPos = strMoney.indexOf("."< 0 ? nLength : strMoney.indexOf(".");
10         int nCount = 0;
11         boolean bZero = false;
12         boolean bNeedLevel = false// 对段的识别,用于是否需要出现段名,如亿,万等
13         // 对整数部份进行反相识别处理
14         for (int i = nPos - 1; i >= 0; i--) {
15             char ch = strMoney.charAt(i);
16             if (nCount % 4 == 0 && nCount > 0) {
17                 // 如果处理的数字为第四位(万),或第八位(亿)等,则要求置段
18                 bNeedLevel = true;
19             }
20             if (ch == '0') {
21                 // 只对拾佰仟位的0进行识别,主要考虑到拾的特殊性,即如10读壹拾,不会读壹拾零
22                 if (nCount % 4 != 0)
23                     bZero = true;
24             } else {
25                 String strTemp = strReturnValue;
26                 strReturnValue = strNumber.substring(ch - 48, ch - 47);
27                 if (nCount > 0) {
28                     strReturnValue += strUnit.substring(nCount, nCount + 1);
29                     if (nCount % 4 != 0 && bNeedLevel) {
30                         strReturnValue += strUnit.substring((int) (nCount / 4),
31                                 (int) (nCount / 4+ 1);
32                     }
33                     bNeedLevel = false;
34                 }
35                 if (bZero) {
36                     // 只有比当前处理的位要低中有数字才补零
37                     if (strTemp != "")
38                         strReturnValue += strNumber.substring(01);
39                     bZero = false;
40                 }
41                 strReturnValue += strTemp;
42             }
43             nCount++;
44         }
45         strReturnValue += strUnit.substring(01);
46         boolean bAllZero = true;
47         // 小数点后面的处理
48         if (nPos < nLength) {
49             if (nLength > 2)
50                 nLength = 2;
51             for (int i = 0; i < nLength; i++)
52                 if (strMoney.charAt(nPos + i + 1!= '0')
53                     bAllZero = false;
54         }
55         if (bAllZero) {
56             strReturnValue += strOtherUnit.substring(01);
57         } else {
58             // 对分角的处理
59             for (int i = 0; i < nLength; i++) {
60                 char ch = strMoney.charAt(nPos + 1 + i);
61                 if (ch == '0' && i > 0) {
62                 } else {
63                     strReturnValue += strNumber.substring(ch - 48, ch - 47);
64                     if (ch != '0')
65                         strReturnValue += strOtherUnit.substring(i + 1, i + 2);
66                 }
67             }
68         }
69         return strReturnValue;
70     }
71         
72     /**
73      * @param args
74      */
75     public static void main(String[] args) {
76         // TODO 自动生成方法存根
77         Money m =new Money();
78         double nMoney =1230012.123;
79         String strMoney;
80         strMoney=m.convertBigMoney(nMoney);
81         System.out.print(strMoney);
82     }
83     
84 }


转载于:https://www.cnblogs.com/softbird/archive/2005/12/05/290855.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值