之前在CSDN论坛里,看有人Show了一些把中文大写转换成阿拉伯数字的程序代码,自己也用Java语言实现了程序设计,基本上能够实现十万亿以内的任何数字的转换。之前也帖出自己的实现代码。
但我个人认为,把大写转换为数字实际上是没有多少意义的。因为很少有把大写转为数字的,大多数都是把数字转换为大写。何况把大写转为数字并不是一件很容易的事情,因为汉语大写有很多种说法,比如说:101,它的汉语说法可以有好多种:
(一)、百零一
(二)、一百零一
(三)、一百又一
(四)、幺零幺
因此,要实现起来其实是很难的。而且还要防止用户输入大小写不固定,一会输入“一百零一”,一会又输入“壹佰零壹”,或者是二者的杂合体。形式千变万化,何况这一个数字就可以有这么多种,还有那么多特殊的数字呢?除非用成统一标准的输入。否则是很容易出现问题的。
但是,数字转换成大写却是很实用的,平时去银行用得比较多,只要涉及金钱的时候,基本上都要求用大写。所以,这种转换看来是符合要求,因此,我用C#代码实现了其功能,并将用户输入用“,”分隔成三个一组的形式,可以实现百万亿级别的数字转换。下面我帖出部分代码,大家指正:
其他输入验证我就不帖出来了,只把核心代码帖出来
1. class
2. {
3. public string returnResult(long
4. {
5. string
6. //主要理念是把数字字符串最终分隔为四个一组四个一组的,不足的不管。
7. if
8. {
9. //定义一个数组,存储整个字条串分隔后的字符串。然后两次递归调用。
10. //调用完全后,得到总的大写字符串。
11. string[] firstSplit = new string[2];
12. firstSplit[0] = numStr.Substring(0, numStr.Length - 8);
13. firstSplit[1] = numStr.Substring(numStr.Length - 8, 8);
14. string result1 = getString(firstSplit[0]) + "億";
15. string
16.
17. return
18. }
19. else
20. {
21. return
22. }
23. }
24. //进行一次递归调用,得到两组四位数字的大字字串
25. public string getString(string
26. {
27. if
28. {
29. string[] secondSplit = new string[2];
30. secondSplit[0] = str.Substring(0, str.Length - 4);
31. secondSplit[1] = str.Substring(str.Length - 4, 4);
32. string
33. string
34. //确定是否加“万”字
35. if (!secondSplit[0].Equals("0000"))
36. {
37. "萬";
38. }
39.
40. return
41. }
42. else
43. {
44. return
45.
46. }
47. }
48.
49. int[] value = { 1000, 100, 10 };
50.
51. //将四位数以内的字符串返回为正确的大写称呼 比如1234 返回:一千二百三十四
52. public string getRe(string
53. {
54. char[] number = doWith.ToCharArray();
55. int
56. string re = "";
57.
58. for (int
59. {
60. switch
61. {
62. case '0':
63.
64. if (re.EndsWith("零"))
65. {
66. "";
67. }
68. else
69. {
70. "零";
71. }
72.
73. break;
74. case '1':
75. "壹";
76. break;
77. case '2':
78. "贰";
79. break;
80. case '3':
81. "叁";
82. break;
83. case '4':
84. "肆";
85. break;
86. case '5':
87. "伍";
88. break;
89. case '6':
90. "陆";
91. break;
92. case '7':
93. "柒";
94. break;
95. case '8':
96. "捌";
97. break;
98. case '9':
99. "玖";
100. break;
101. }
102.
103. int index = (int)Math.Pow(10, length - i - 1);
104. if (number[i].ToString() == "0")
105. {
106. index = -1;
107. }
108. switch
109. {
110. case
111. "仟";
112. break;
113. case
114. "佰";
115. break;
116. case
117. "拾";
118. break;
119. }
120. }
121.
122. if (re.EndsWith("零"))
123. {
124. re = re.Substring(0, re.Length - 1);
125. }
126. return
127.
128. }
129. }
130.
131.