转载:
return (new Number2English()).NumerToString(123.214);

Code
1
Number2English#region Number2English
2
public class Number2English
3
{
4
private string[] StrNO = new string[19];
5
private string[] Unit = new string[8];
6
private string[] StrTens = new string[9];
7
8
NumberToStringNumberToString#region NumberToString
9
public string NumberToString(double Number)
10
{
11
string Str;
12
string BeforePoint;
13
string AfterPoint;
14
string tmpStr;
15
int nBit;
16
string CurString;
17
int nNumLen;
18
Init();
19
Str = Convert.ToString(Math.Round(Number,2));
20
if (Str.IndexOf(".")==-1)
21
{
22
BeforePoint = Str;
23
AfterPoint = "";
24
}
25
else
26
{
27
BeforePoint = Str.Substring(0,Str.IndexOf("."));
28
AfterPoint = Str.Substring(Str.IndexOf(".")+1,Str.Length - Str.IndexOf(".")-1);
29
}
30
if (BeforePoint.Length > 12)
31
{
32
return null;
33
}
34
Str = "";
35
while (BeforePoint.Length > 0)
36
{
37
nNumLen = Len(BeforePoint);
38
if (nNumLen % 3 == 0)
39
{
40
CurString = Left(BeforePoint, 3);
41
BeforePoint = Right(BeforePoint, nNumLen - 3);
42
}
43
else
44
{
45
CurString = Left(BeforePoint, (nNumLen % 3));
46
BeforePoint = Right(BeforePoint, nNumLen - (nNumLen % 3));
47
}
48
nBit = Len(BeforePoint) / 3;
49
tmpStr = DecodeHundred(CurString);
50
if((BeforePoint == Len(BeforePoint).ToString() || nBit ==0) && Len(CurString) ==3)
51
{
52
if (System.Convert.ToInt32(Left(CurString, 1)) != 0 & System.Convert.ToInt32(Right(CurString, 2)) != 0)
53
{
54
tmpStr = Left(tmpStr, tmpStr.IndexOf(Unit[3]) + Len(Unit[3])) + Unit[7] + " " + Right(tmpStr, Len(tmpStr) - (tmpStr.IndexOf(Unit[3]) + Len(Unit[3])));
55
}
56
else
57
{
58
tmpStr = Unit[7] + " " + tmpStr;
59
}
60
}
61
if (nBit == 0)
62
{
63
Str = Convert.ToString(Str + " " + tmpStr).Trim();
64
}
65
else
66
{
67
Str = Convert.ToString(Str + " " + tmpStr + " " + Unit[nBit-1]).Trim();
68
}
69
if (Left(Str, 3) == Unit[7])
70
{
71
Str = Convert.ToString(Right(Str, Len(Str) - 3)).Trim();
72
}
73
if( BeforePoint == Len(BeforePoint).ToString())
74
{
75
return "";
76
}
77
}
78
BeforePoint = Str;
79
if (Len(AfterPoint) > 0)
80
{
81
AfterPoint = Unit[5] + " " + DecodeHundred(AfterPoint) + " " + Unit[6];
82
}
83
else
84
{
85
AfterPoint = Unit[4];
86
}
87
return BeforePoint + " " + AfterPoint;
88
89
}
90
91
#endregion
92
93
InitInit#region Init
94
private void Init()
95
{
96
if (StrNO[0] != "One")
97
{
98
StrNO[0] = "One";
99
StrNO[1] = "Two";
100
StrNO[2] = "Three";
101
StrNO[3] = "Four";
102
StrNO[4] = "Five";
103
StrNO[5] = "Six";
104
StrNO[6] = "Seven";
105
StrNO[7] = "Eight";
106
StrNO[8] = "Nine";
107
StrNO[9] = "Ten";
108
StrNO[10] = "Eleven";
109
StrNO[11] = "Twelve";
110
StrNO[12] = "Thirteen";
111
StrNO[13] = "Fourteen";
112
StrNO[14] = "Fifteen";
113
StrNO[15] = "Sixteen";
114
StrNO[16] = "Seventeen";
115
StrNO[17] = "Eighteen";
116
StrNO[18] = "Nineteen";
117
StrTens[0] = "Ten";
118
StrTens[1] = "Twenty";
119
StrTens[2] = "Thirty";
120
StrTens[3] = "Forty";
121
StrTens[4] = "Fifty";
122
StrTens[5] = "Sixty";
123
StrTens[6] = "Seventy";
124
StrTens[7] = "Eighty";
125
StrTens[8] = "Ninety";
126
Unit[0] = "Thousand";
127
Unit[1] = "Million";
128
Unit[2] = "Billion";
129
Unit[3] = "Hundred";
130
Unit[4] = "Only";
131
Unit[5] = "Point";
132
Unit[6] = "Cent";
133
Unit[7] = "And";
134
}
135
}
136
137
#endregion
138
139
DecodeHundredDecodeHundred#region DecodeHundred
140
private string DecodeHundred(string HundredString)
141
{
142
int tmp;
143
string rtn="";
144
if( Len(HundredString) > 0 && Len(HundredString) <= 3)
145
{
146
switch (Len(HundredString))
147
{
148
case 1:
149
tmp = System.Convert.ToInt32(HundredString);
150
if (tmp != 0)
151
{
152
rtn=StrNO[tmp-1].ToString();
153
}
154
break;
155
case 2:
156
tmp = System.Convert.ToInt32(HundredString);
157
if (tmp != 0)
158
{
159
if ((tmp < 20))
160
{
161
rtn=StrNO[tmp-1].ToString();
162
}
163
else
164
{
165
if (System.Convert.ToInt32(Right(HundredString, 1)) == 0)
166
{
167
rtn=StrTens[Convert.ToInt32(tmp / 10)-1].ToString();
168
}
169
else
170
{
171
rtn=Convert.ToString(StrTens[Convert.ToInt32(tmp / 10)-1] + "-" + StrNO[System.Convert.ToInt32(Right(HundredString, 1))-1]);
172
}
173
}
174
}
175
break;
176
case 3:
177
if (System.Convert.ToInt32(Left(HundredString, 1)) != 0)
178
{
179
rtn=Convert.ToString(StrNO[System.Convert.ToInt32(Left(HundredString, 1))-1] + " " + Unit[3] + " " + DecodeHundred(Right(HundredString, 2)));
180
}
181
else
182
{
183
rtn=DecodeHundred(Right(HundredString, 2)).ToString();
184
}
185
break;
186
default:
187
break;
188
}
189
}
190
return rtn;
191
}
192
193
#endregion
194
195
LeftLeft#region Left
196
private string Left(string str,int n)
197
{
198
return str.Substring(0,n);
199
}
200
#endregion
201
202
RightRight#region Right
203
private string Right(string str,int n)
204
{
205
return str.Substring(str.Length-n,n);
206
}
207
#endregion
208
209
LenLen#region Len
210
private int Len(string str)
211
{
212
return str.Length;
213
}
214
#endregion
215
}
216
#endregion
return (new Number2English()).NumerToString(123.214);
1

Number2English#region Number2English2
public class Number2English3

{4
private string[] StrNO = new string[19]; 5
private string[] Unit = new string[8]; 6
private string[] StrTens = new string[9];7

8

NumberToStringNumberToString#region NumberToString9
public string NumberToString(double Number) 10

{ 11
string Str; 12
string BeforePoint; 13
string AfterPoint; 14
string tmpStr; 15
int nBit; 16
string CurString;17
int nNumLen;18
Init(); 19
Str = Convert.ToString(Math.Round(Number,2)); 20
if (Str.IndexOf(".")==-1) 21

{ 22
BeforePoint = Str; 23
AfterPoint = ""; 24
} 25
else 26

{ 27
BeforePoint = Str.Substring(0,Str.IndexOf(".")); 28
AfterPoint = Str.Substring(Str.IndexOf(".")+1,Str.Length - Str.IndexOf(".")-1); 29
}30
if (BeforePoint.Length > 12) 31

{ 32
return null; 33
}34
Str = "";35
while (BeforePoint.Length > 0) 36

{37
nNumLen = Len(BeforePoint); 38
if (nNumLen % 3 == 0) 39

{ 40
CurString = Left(BeforePoint, 3); 41
BeforePoint = Right(BeforePoint, nNumLen - 3); 42
} 43
else 44

{ 45
CurString = Left(BeforePoint, (nNumLen % 3)); 46
BeforePoint = Right(BeforePoint, nNumLen - (nNumLen % 3)); 47
}48
nBit = Len(BeforePoint) / 3; 49
tmpStr = DecodeHundred(CurString);50
if((BeforePoint == Len(BeforePoint).ToString() || nBit ==0) && Len(CurString) ==3)51

{52
if (System.Convert.ToInt32(Left(CurString, 1)) != 0 & System.Convert.ToInt32(Right(CurString, 2)) != 0) 53

{ 54
tmpStr = Left(tmpStr, tmpStr.IndexOf(Unit[3]) + Len(Unit[3])) + Unit[7] + " " + Right(tmpStr, Len(tmpStr) - (tmpStr.IndexOf(Unit[3]) + Len(Unit[3]))); 55
} 56
else 57

{ 58
tmpStr = Unit[7] + " " + tmpStr; 59
}60
}61
if (nBit == 0) 62

{ 63
Str = Convert.ToString(Str + " " + tmpStr).Trim();64
} 65
else 66

{ 67
Str = Convert.ToString(Str + " " + tmpStr + " " + Unit[nBit-1]).Trim(); 68
}69
if (Left(Str, 3) == Unit[7]) 70

{ 71
Str = Convert.ToString(Right(Str, Len(Str) - 3)).Trim(); 72
}73
if( BeforePoint == Len(BeforePoint).ToString())74

{75
return "";76
}77
}78
BeforePoint = Str; 79
if (Len(AfterPoint) > 0) 80

{ 81
AfterPoint = Unit[5] + " " + DecodeHundred(AfterPoint) + " " + Unit[6]; 82
} 83
else 84

{ 85
AfterPoint = Unit[4]; 86
} 87
return BeforePoint + " " + AfterPoint;88

89
}90

91
#endregion92

93

InitInit#region Init94
private void Init() 95

{ 96
if (StrNO[0] != "One") 97

{ 98
StrNO[0] = "One"; 99
StrNO[1] = "Two"; 100
StrNO[2] = "Three"; 101
StrNO[3] = "Four"; 102
StrNO[4] = "Five"; 103
StrNO[5] = "Six"; 104
StrNO[6] = "Seven"; 105
StrNO[7] = "Eight"; 106
StrNO[8] = "Nine"; 107
StrNO[9] = "Ten"; 108
StrNO[10] = "Eleven"; 109
StrNO[11] = "Twelve"; 110
StrNO[12] = "Thirteen"; 111
StrNO[13] = "Fourteen"; 112
StrNO[14] = "Fifteen"; 113
StrNO[15] = "Sixteen"; 114
StrNO[16] = "Seventeen"; 115
StrNO[17] = "Eighteen"; 116
StrNO[18] = "Nineteen"; 117
StrTens[0] = "Ten"; 118
StrTens[1] = "Twenty"; 119
StrTens[2] = "Thirty"; 120
StrTens[3] = "Forty"; 121
StrTens[4] = "Fifty"; 122
StrTens[5] = "Sixty"; 123
StrTens[6] = "Seventy"; 124
StrTens[7] = "Eighty"; 125
StrTens[8] = "Ninety"; 126
Unit[0] = "Thousand"; 127
Unit[1] = "Million"; 128
Unit[2] = "Billion"; 129
Unit[3] = "Hundred"; 130
Unit[4] = "Only"; 131
Unit[5] = "Point"; 132
Unit[6] = "Cent"; 133
Unit[7] = "And"; 134
} 135
}136

137
#endregion138

139

DecodeHundredDecodeHundred#region DecodeHundred140
private string DecodeHundred(string HundredString) 141

{ 142
int tmp;143
string rtn="";144
if( Len(HundredString) > 0 && Len(HundredString) <= 3)145

{146
switch (Len(HundredString))147

{148
case 1:149
tmp = System.Convert.ToInt32(HundredString); 150
if (tmp != 0) 151

{ 152
rtn=StrNO[tmp-1].ToString(); 153
} 154
break;155
case 2:156
tmp = System.Convert.ToInt32(HundredString); 157
if (tmp != 0) 158

{ 159
if ((tmp < 20)) 160

{ 161
rtn=StrNO[tmp-1].ToString(); 162
} 163
else 164

{ 165
if (System.Convert.ToInt32(Right(HundredString, 1)) == 0) 166

{ 167
rtn=StrTens[Convert.ToInt32(tmp / 10)-1].ToString(); 168
} 169
else 170

{ 171
rtn=Convert.ToString(StrTens[Convert.ToInt32(tmp / 10)-1] + "-" + StrNO[System.Convert.ToInt32(Right(HundredString, 1))-1]);172
} 173
} 174
} 175
break;176
case 3:177
if (System.Convert.ToInt32(Left(HundredString, 1)) != 0) 178

{ 179
rtn=Convert.ToString(StrNO[System.Convert.ToInt32(Left(HundredString, 1))-1] + " " + Unit[3] + " " + DecodeHundred(Right(HundredString, 2))); 180
} 181
else 182

{ 183
rtn=DecodeHundred(Right(HundredString, 2)).ToString(); 184
} 185
break;186
default:187
break;188
}189
}190
return rtn;191
}192

193
#endregion194

195

LeftLeft#region Left196
private string Left(string str,int n)197

{198
return str.Substring(0,n);199
}200
#endregion201

202

RightRight#region Right203
private string Right(string str,int n)204

{205
return str.Substring(str.Length-n,n);206
}207
#endregion208

209

LenLen#region Len210
private int Len(string str)211

{212
return str.Length;213
}214
#endregion215
}216
#endregion