决定要做一个家庭财务记账的小软件,正在段准备阶段,昨天从网上看了一些C++的关于金额大写的转换,我只是用java改写了一下,想熟悉一下算法,已经好久没有编程了,静下心来做已经很难了.
做毕业设计那会,天天java api找了好多次,现在可能连hellworld也做不出来了,人正在一点点地颓废
不想颓废 所以有的时候还是要一点点看看的
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(0, 1);
39 bZero = false;
40 }
41 strReturnValue += strTemp;
42 }
43 nCount++;
44 }
45 strReturnValue += strUnit.substring(0, 1);
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(0, 1);
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 }
做毕业设计那会,天天java api找了好多次,现在可能连hellworld也做不出来了,人正在一点点地颓废
不想颓废 所以有的时候还是要一点点看看的
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(0, 1);
39 bZero = false;
40 }
41 strReturnValue += strTemp;
42 }
43 nCount++;
44 }
45 strReturnValue += strUnit.substring(0, 1);
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(0, 1);
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 }