将数字转换为中文表示


  1 using  System;
  2 using  System.Collections.Generic;
  3 using  System.Text;
  4
  5 namespace  ConvertNum2Chinese
  6 {
  7    class Program
  8    {
  9        private Dictionary<charstring> _numCharacter;
 10        private Dictionary<intstring> _numPosName;
 11        private Dictionary<intstring> _numPosName2;
 12
 13        public Program()
 14        {
 15            _numCharacter = new Dictionary<charstring>(10);
 16            _numCharacter.Add('0'"");
 17            _numCharacter.Add('1'"");
 18            _numCharacter.Add('2'"");
 19            _numCharacter.Add('3'"");
 20            _numCharacter.Add('4'"");
 21            _numCharacter.Add('5'"");
 22            _numCharacter.Add('6'"");
 23            _numCharacter.Add('7'"");
 24            _numCharacter.Add('8'"");
 25            _numCharacter.Add('9'"");
 26
 27            _numPosName = new Dictionary<intstring>(4);
 28            _numPosName.Add(0"");
 29            _numPosName.Add(1"");
 30            _numPosName.Add(2"");
 31            _numPosName.Add(3string.Empty);
 32
 33            _numPosName2 = new Dictionary<intstring>(4);
 34            //  _numPosName2.Add(-1, "元");
 35            _numPosName2.Add(1string.Empty);
 36            _numPosName2.Add(2"");
 37            _numPosName2.Add(3"亿");
 38            _numPosName2.Add(4"");
 39        }

 40
 41        static void Main(string[] args)
 42        {
 43            Program p = new Program();
 44
 45            Display("100000000000", p);
 46            Display("99999999.1", p);
 47            Display("120012.10", p);
 48            Display("0.12", p);
 49            Display("0.1211", p);
 50            Display("0.00", p);
 51            Display("", p);
 52            Display("0", p);
 53            Display(".0", p);
 54        }

 55
 56        private static void Display(string num, Program p)
 57        {
 58            Console.WriteLine("Before: " + num);
 59            Console.WriteLine("After: " + p.ConvertNum2Chinese(num));
 60            Console.WriteLine();
 61        }

 62
 63        public string ConvertNum2Chinese(string num)
 64        {
 65            int index = num.IndexOf('.');
 66
 67            StringBuilder leftNum;
 68            StringBuilder rightNum;
 69
 70            if (index == -1)
 71            {
 72                leftNum = new StringBuilder(num);
 73                rightNum = new StringBuilder();
 74            }

 75            else
 76            {
 77                leftNum = new StringBuilder(num.Substring(0, index));
 78                rightNum = new StringBuilder(num.Substring(index + 1, num.Length - index - 1));
 79            }

 80
 81            string result = string.Empty;
 82
 83            result += DealLeftNums(leftNum);
 84            result += DealRightNums(rightNum);
 85
 86            if (result.Length == 0)
 87            {
 88                result = "零元";
 89            }

 90
 91            return result;
 92        }

 93
 94        private StringBuilder DealRightNums(StringBuilder rightNum)
 95        {
 96            rightNum.Append("00");
 97            rightNum.Remove(2, rightNum.Length - 2);
 98
 99            StringBuilder s = new StringBuilder();
100
101            s.Append(_numCharacter[rightNum[0]]);
102            if (rightNum[0!= '0')
103            {
104                s.Append("");
105            }

106
107            s.Append(_numCharacter[rightNum[1]]);
108            if (rightNum[1!= '0')
109            {
110                s.Append("");
111            }

112
113            Deal0Nums(s);
114
115            return s;
116        }

117
118        private StringBuilder DealLeftNums(StringBuilder leftNum)
119        {
120            int a = leftNum.Length % 4;
121
122            for (int i = 0; i < a; i++)
123            {
124                leftNum.Insert(0'0');
125            }

126
127            int b = leftNum.Length / 4;
128
129            StringBuilder s = new StringBuilder();
130            string leftNumStr = leftNum.ToString();
131            for (int i = 0; i < b; i++)
132            {
133                s.Append(Deal4Num(leftNumStr.Substring(i * 44), _numPosName2[b - i]));
134            }

135
136            if (s.Length > 0)
137            {
138                s.Append("");
139            }

140
141            Deal0Nums(s);
142
143            return s;
144        }

145
146        private string Deal4Num(string num, string s)
147        {
148            StringBuilder result = new StringBuilder();
149
150            for (int i = 0; i < num.Length; i++)
151            {
152                if (num[i] > '0')
153                {
154                    result.Append(_numCharacter[num[i]] + _numPosName[i]);
155                }

156                else
157                {
158                    result.Append(_numCharacter[num[i]]);
159                }

160            }

161
162            result.Append(s);
163
164            return result.ToString();
165        }

166
167        private void Deal0Nums(StringBuilder sb)
168        {
169            for (int i = 0; i < sb.Length; i++)
170            {
171                if (sb[i] == '')
172                {
173                    if (i == 0)
174                    {
175                        sb.Remove(i, 1);
176                        Deal0Nums(sb);
177                        return;
178                    }

179                    else if (sb[i - 1== '' || i == sb.Length - 1)
180                    {
181                        sb.Remove(i, 1);
182                        i--;
183                    }

184
185                    if (i < sb.Length - 2 && _numPosName2.ContainsValue(new string(sb[i + 1], 1)))
186                    {
187                        sb.Remove(i, 1);
188                    }

189
190                    if (_numPosName2.ContainsValue(new string(sb[i], 1)))
191                    {
192                        if (_numPosName2.ContainsValue(new string(sb[i - 1], 1)))
193                        {
194                            sb.Remove(i, 1);
195                        }

196                    }

197                }

198                else if (sb[i] == '')
199                {
200                    if (sb[i - 1== '')
201                    {
202                        sb.Remove(i - 11);
203                    }

204                }

205            }

206        }

207    }

208}

209


将实数转成中文大学金额。如1234.12转成壹仟贰佰叁拾肆元壹角贰分。

实现代码如下:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值