关于c#:将整数转换为书面数字

关于c#:将整数转换为书面数字

Convert integers to written numbers

是否有一种将整数转换为书面数字的有效方法,例如:

1
string Written = IntegerToWritten(21);

将返回"二十一"。

有什么方法不涉及庞大的查找表吗?


这应该可以正常工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public static class HumanFriendlyInteger
{
    static string[] ones = new string[] {"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine" };
    static string[] teens = new string[] {"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen" };
    static string[] tens = new string[] {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety" };
    static string[] thousandsGroups = {""," Thousand"," Million"," Billion" };

    private static string FriendlyInteger(int n, string leftDigits, int thousands)
    {
        if (n == 0)
        {
            return leftDigits;
        }

        string friendlyInt = leftDigits;

        if (friendlyInt.Length > 0)
        {
            friendlyInt +="";
        }

        if (n < 10)
        {
            friendlyInt += ones[n];
        }
        else if (n < 20)
        {
            friendlyInt += teens[n - 10];
        }
        else if (n < 100)
        {
            friendlyInt += FriendlyInteger(n % 10, tens[n / 10 - 2], 0);
        }
        else if (n < 1000)
        {
            friendlyInt += FriendlyInteger(n % 100, (ones[n / 100] +" Hundred"), 0);
        }
        else
        {
            friendlyInt += FriendlyInteger(n % 1000, FriendlyInteger(n / 1000,"", thousands+1), 0);
            if (n % 1000 == 0)
            {
                return friendlyInt;
            }
        }

        return friendlyInt + thousandsGroups[thousands];
    }

    public static string IntegerToWritten(int n)
    {
        if (n == 0)
        {
            return"Zero";
        }
        else if (n < 0)
        {
            return"Negative" + IntegerToWritten(-n);
        }

        return FriendlyInteger(n,"", 0);
    }
}

(经过编辑以修正带有百万,十亿等错误)


我使用这个方便的库,称为Humanizer。

https://github.com/Humanizr/Humanizer

它支持多种文化,不仅可以将数字转换为单词,还可以转换日期,并且使用非常简单。

这是我的用法:

1
2
3
int someNumber = 543;
var culture = System.Globalization.CultureInfo("en-US");
var result = someNumber.ToWords(culture); // 543 -> five hundred forty-three

瞧!


我使用的是VB代码,但是您可以轻松地将其转换为C#。有用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Function NumberToText(ByVal n As Integer) As String

   Select Case n
Case 0
  Return""

Case 1 To 19
  Dim arr() As String = {"One","Two","Three","Four","Five","Six","Seven", _
   "Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen", _
     "Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"}
  Return arr(n-1) &""

Case 20 to 99
  Dim arr() as String = {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}
  Return arr(n\\10 -2) &"" & NumberToText(n Mod 10)

Case 100 to 199
  Return"One Hundred" & NumberToText(n Mod 100)

Case 200 to 999
  Return NumberToText(n\\100) &"Hundreds" & NumberToText(n mod 100)

Case 1000 to 1999
  Return"One Thousand" & NumberToText(n Mod 1000)

Case 2000 to 999999
  Return NumberToText(n\\1000) &"Thousands" & NumberToText(n Mod 1000)

Case 1000000 to 1999999
  Return"One Million" & NumberToText(n Mod 1000000)

Case 1000000 to 999999999
  Return NumberToText(n\\1000000) &"Millions" & NumberToText(n Mod 1000000)

Case 1000000000 to 1999999999
  Return"One Billion" & NumberTotext(n Mod 1000000000)

Case Else
  Return NumberToText(n\\1000000000) &"Billion" _
    & NumberToText(n mod 1000000000)
End Select
End Function

这是C#中的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public static string AmountInWords(double amount)
{
        var n = (int)amount;

        if (n == 0)
            return"";
        else if (n > 0 && n <= 19)
        {
            var arr = new string[] {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen" };
            return arr[n - 1] +"";
        }
        else if (n >= 20 && n <= 99)
        {
            var arr = new string[] {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety" };
            return arr[n / 10 - 2] +"" + AmountInWords(n % 10);
        }
        else if (n >= 100 && n <= 199)
        {
            return"One Hundred" + AmountInWords(n % 100);
        }
        else if (n >= 200 && n <= 999)
        {
            return AmountInWords(n / 100) +"Hundred" + AmountInWords(n % 100);
        }
        else if (n >= 1000 && n <= 1999)
        {
            return"One Thousand" + AmountInWords(n % 1000);
        }
        else if (n >= 2000 && n <= 999999)
        {
            return AmountInWords(n / 1000) +"Thousand" + AmountInWords(n % 1000);
        }
        else if (n >= 1000000 && n <= 1999999)
        {
            return"One Million" + AmountInWords(n % 1000000);
        }
        else if (n >= 1000000 && n <= 999999999)
        {
            return AmountInWords(n / 1000000) +"Million" + AmountInWords(n % 1000000);
        }
        else if (n >= 1000000000 && n <= 1999999999)
        {
            return"One Billion" + AmountInWords(n % 1000000000);
        }
        else
        {
            return AmountInWords(n / 1000000000) +"Billion" + AmountInWords(n % 1000000000);
        }
    }

为什么要大量查找表?

1
2
3
4
5
6
7
8
9
10
11
12
13
string GetWrittenInteger(int n)
{
  string[] a = new string[] {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine" }
  string[] b = new string[] {"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen" }
  string[] c = new string[] {"Twenty","Thirty","Forty","Sixty","Seventy","Eighty","Ninety"};
  string[] d = new string[] {"Hundred","Thousand","Million"}
  string s = n.ToString();

  for (int i = 0; i < s.Length; i++)
  {
    // logic (too lazy but you get the idea)
  }
}

公认的答案似乎并不完美。它不能处理像21这样的破折号,也不会为诸如"一百一十一"之类的数字加上"和"一词,而且,它是递归的。

这是我的答案。它会智能地添加"和"一词,并适当地为数字连字符。让我知道是否需要任何修改。

这是调用它的方法(显然,您希望将其放在某个类的某个地方):

1
2
3
4
for (int i = int.MinValue+1; i < int.MaxValue; i++)
{
    Console.WriteLine(ToWords(i));
}

这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
private static readonly string[] Ones = {"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};

private static readonly string[] Teens =
{
   "Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen",
   "Seventeen","Eighteen","Nineteen"
};

private static readonly string[] Tens =
{
   "","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty",
   "Ninety"
};

public static string ToWords(int number)
{
    if (number == 0)
        return"Zero";

    var wordsList = new List<string>();

    if (number < 0)
    {
        wordsList.Add("Negative");
        number = Math.Abs(number);
    }

    if (number >= 1000000000 && number <= int.MaxValue) //billions
    {
        int billionsValue = number / 1000000000;
        GetValuesUnder1000(billionsValue, wordsList);
        wordsList.Add("Billion");
        number -= billionsValue * 1000000000;

        if (number > 0 && number < 10)
            wordsList.Add("and");
    }

    if (number >= 1000000 && number < 1000000000) //millions
    {
        int millionsValue = number / 1000000;
        GetValuesUnder1000(millionsValue, wordsList);
        wordsList.Add("Million");
        number -= millionsValue * 1000000;

        if (number > 0 && number < 10)
            wordsList.Add("and");
    }

    if (number >= 1000 && number < 1000000) //thousands
    {
        int thousandsValue = number/1000;
        GetValuesUnder1000(thousandsValue, wordsList);
        wordsList.Add("Thousand");
        number -= thousandsValue * 1000;

        if (number > 0 && number < 10)
            wordsList.Add("and");
    }

    GetValuesUnder1000(number, wordsList);

    return string.Join("", wordsList);
}

private static void GetValuesUnder1000(int number, List<string> wordsList)
{
    while (number != 0)
    {
        if (number < 10)
        {
            wordsList.Add(Ones[number]);
            number -= number;
        }
        else if (number < 20)
        {
            wordsList.Add(Teens[number - 10]);
            number -= number;
        }
        else if (number < 100)
        {
            int tensValue = ((int) (number/10))*10;
            int onesValue = number - tensValue;

            if (onesValue == 0)
            {
                wordsList.Add(Tens[tensValue/10]);
            }
            else
            {
                wordsList.Add(Tens[tensValue/10] +"-" + Ones[onesValue]);
            }

            number -= tensValue;
            number -= onesValue;
        }
        else if (number < 1000)
        {
            int hundredsValue = ((int) (number/100))*100;
            wordsList.Add(Ones[hundredsValue/100]);
            wordsList.Add("Hundred");
            number -= hundredsValue;

            if (number > 0)
                wordsList.Add("and");
        }
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace tryingstartfror4digits
{
    class Program
    {
        static void Main(string[] args)
        {
            Program pg = new Program();
            Console.WriteLine("Enter ur number");
            int num = Convert.ToInt32(Console.ReadLine());

            if (num <= 19)
            {
                string g = pg.first(num);
                Console.WriteLine("The number is" + g);
            }
            else if ((num >= 20) && (num <= 99))
            {
                    if (num % 10 == 0)
                    {
                        string g = pg.second(num / 10);
                        Console.WriteLine("The number is" + g);
                    }
                    else
                    {
                        string g = pg.second(num / 10) + pg.first(num % 10);
                        Console.WriteLine("The number is" + g);
                    }
            }
            else if ((num >= 100) && (num <= 999))
            {
                int k = num % 100;
                string g = pg.first(num / 100) +pg.third(0) + pg.second(k / 10)+pg.first(k%10);
                Console.WriteLine("The number is" + g);
            }
            else if ((num >= 1000) && (num <= 19999))
            {
                int h = num % 1000;
                int k = h % 100;
                string g = pg.first(num / 1000) +"Thousand" + pg.first(h/ 100) + pg.third(k) + pg.second(k / 10) + pg.first(k % 10);
                Console.WriteLine("The number is" + g);
            }

            Console.ReadLine();
        }

        public string first(int num)
        {
            string name;

            if (num == 0)
            {
                name ="";
            }
            else
            {
                string[] arr1 = new string[] {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine" ,"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
                name = arr1[num - 1];
            }

            return name;
        }

        public string second(int num)
        {
            string name;

            if ((num == 0)||(num==1))
            {
                 name ="";
            }
            else
            {
                string[] arr1 = new string[] {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety" };
                name = arr1[num - 2];
            }

            return name;
        }

        public string third(int num)
        {
            string name ;

            if (num == 0)
            {
                name ="";
            }
            else
            {
                string[] arr1 = new string[] {"Hundred" };
                name = arr1[0];
            }

            return name;
        }
    }
}

这从1到19999正常工作,我完成后会尽快更新


以下C#控制台应用程序代码将接受货币值(最多2个小数),并以英语打印。这不仅将整数转换为等效的英语,而且还转换为以美元和美分表示的货币值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
 namespace ConsoleApplication2
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text.RegularExpressions;
    class Program
    {
       static void Main(string[] args)
        {
            bool repeat = true;
            while (repeat)
            {
                string inputMonetaryValueInNumberic = string.Empty;
                string centPart = string.Empty;
                string dollarPart = string.Empty;
                Console.Write("\
Enter the monetary value :"
);
                inputMonetaryValueInNumberic = Console.ReadLine();
                inputMonetaryValueInNumberic = inputMonetaryValueInNumberic.TrimStart('0');

                if (ValidateInput(inputMonetaryValueInNumberic))
                {

                    if (inputMonetaryValueInNumberic.Contains('.'))
                    {
                        centPart = ProcessCents(inputMonetaryValueInNumberic.Substring(inputMonetaryValueInNumberic.IndexOf(".") + 1));
                        dollarPart = ProcessDollar(inputMonetaryValueInNumberic.Substring(0, inputMonetaryValueInNumberic.IndexOf(".")));
                    }
                    else
                    {
                        dollarPart = ProcessDollar(inputMonetaryValueInNumberic);
                    }
                    centPart = string.IsNullOrWhiteSpace(centPart) ? string.Empty :" and" + centPart;
                    Console.WriteLine(string.Format("\
\
{0}{1}"
, dollarPart, centPart));
                }
                else
                {
                    Console.WriteLine("Invalid Input..");
                }

                Console.WriteLine("\
\
Press any key to continue or Escape of close :"
);
                var loop = Console.ReadKey();
                repeat = !loop.Key.ToString().Contains("Escape");
                Console.Clear();
            }

        }

        private static string ProcessCents(string cents)
        {
            string english = string.Empty;
            string dig3 = Process3Digit(cents);
            if (!string.IsNullOrWhiteSpace(dig3))
            {
                dig3 = string.Format("{0} {1}", dig3, GetSections(0));
            }
            english = dig3 + english;
            return english;
        }
        private static string ProcessDollar(string dollar)
        {
            string english = string.Empty;
            foreach (var item in Get3DigitList(dollar))
            {
                string dig3 = Process3Digit(item.Value);
                if (!string.IsNullOrWhiteSpace(dig3))
                {
                    dig3 = string.Format("{0} {1}", dig3, GetSections(item.Key));
                }
                english = dig3 + english;
            }
            return english;
        }
        private static string Process3Digit(string digit3)
        {
            string result = string.Empty;
            if (Convert.ToInt32(digit3) != 0)
            {
                int place = 0;
                Stack<string> monetaryValue = new Stack<string>();
                for (int i = digit3.Length - 1; i >= 0; i--)
                {
                    place += 1;
                    string stringValue = string.Empty;
                    switch (place)
                    {
                        case 1:
                            stringValue = GetOnes(digit3[i].ToString());
                            break;
                        case 2:
                            int tens = Convert.ToInt32(digit3[i]);
                            if (tens == 1)
                            {
                                if (monetaryValue.Count > 0)
                                {
                                    monetaryValue.Pop();
                                }
                                stringValue = GetTens((digit3[i].ToString() + digit3[i + 1].ToString()));
                            }
                            else
                            {
                                stringValue = GetTens(digit3[i].ToString());
                            }
                            break;
                        case 3:
                            stringValue = GetOnes(digit3[i].ToString());
                            if (!string.IsNullOrWhiteSpace(stringValue))
                            {
                                string postFixWith =" Hundred";
                                if (monetaryValue.Count > 0)
                                {
                                    postFixWith = postFixWith +" And";
                                }
                                stringValue += postFixWith;
                            }
                            break;
                    }
                    if (!string.IsNullOrWhiteSpace(stringValue))
                        monetaryValue.Push(stringValue);
                }
                while (monetaryValue.Count > 0)
                {
                    result +="" + monetaryValue.Pop().ToString().Trim();
                }
            }
            return result;
        }
        private static Dictionary<int, string> Get3DigitList(string monetaryValueInNumberic)
        {
            Dictionary<int, string> hundredsStack = new Dictionary<int, string>();
            int counter = 0;
            while (monetaryValueInNumberic.Length >= 3)
            {
                string digit3 = monetaryValueInNumberic.Substring(monetaryValueInNumberic.Length - 3, 3);
                monetaryValueInNumberic = monetaryValueInNumberic.Substring(0, monetaryValueInNumberic.Length - 3);
                hundredsStack.Add(++counter, digit3);
            }
            if (monetaryValueInNumberic.Length != 0)
                hundredsStack.Add(++counter, monetaryValueInNumberic);
            return hundredsStack;
        }
        private static string GetTens(string tensPlaceValue)
        {
            string englishEquvalent = string.Empty;
            int value = Convert.ToInt32(tensPlaceValue);
            Dictionary<int, string> tens = new Dictionary<int, string>();
            tens.Add(2,"Twenty");
            tens.Add(3,"Thirty");
            tens.Add(4,"Forty");
            tens.Add(5,"Fifty");
            tens.Add(6,"Sixty");
            tens.Add(7,"Seventy");
            tens.Add(8,"Eighty");
            tens.Add(9,"Ninty");
            tens.Add(10,"Ten");
            tens.Add(11,"Eleven");
            tens.Add(12,"Twelve");
            tens.Add(13,"Thrteen");
            tens.Add(14,"Fourteen");
            tens.Add(15,"Fifteen");
            tens.Add(16,"Sixteen");
            tens.Add(17,"Seventeen");
            tens.Add(18,"Eighteen");
            tens.Add(19,"Ninteen");
            if (tens.ContainsKey(value))
            {
                englishEquvalent = tens[value];
            }

            return englishEquvalent;

        }
        private static string GetOnes(string onesPlaceValue)
        {
            int value = Convert.ToInt32(onesPlaceValue);
            string englishEquvalent = string.Empty;
            Dictionary<int, string> ones = new Dictionary<int, string>();
            ones.Add(1," One");
            ones.Add(2," Two");
            ones.Add(3," Three");
            ones.Add(4," Four");
            ones.Add(5," Five");
            ones.Add(6," Six");
            ones.Add(7," Seven");
            ones.Add(8," Eight");
            ones.Add(9," Nine");

            if (ones.ContainsKey(value))
            {
                englishEquvalent = ones[value];
            }

            return englishEquvalent;
        }
        private static string GetSections(int section)
        {
            string sectionName = string.Empty;
            switch (section)
            {
                case 0:
                    sectionName ="Cents";
                    break;
                case 1:
                    sectionName ="Dollars";
                    break;
                case 2:
                    sectionName ="Thousand";
                    break;
                case 3:
                    sectionName ="Million";
                    break;
                case 4:
                    sectionName ="Billion";
                    break;
                case 5:
                    sectionName ="Trillion";
                    break;
                case 6:
                    sectionName ="Zillion";
                    break;
            }
            return sectionName;
        }
        private static bool ValidateInput(string input)
        {
            return Regex.IsMatch(input,"[0-9]{1,18}(\\\\.[0-9]{1,2})?"))
        }
    }
}

对于相同问题的孟加拉语数值,Nick Masao的答案的扩展。数字的初始输入是Unicode字符串。干杯!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
string number ="????";
number = number.Replace("?","0").Replace("?","1").Replace("?","2").Replace("?","3").Replace("?","4").Replace("?","5").Replace("?","6").Replace("?","7").Replace("?","8").Replace("?","9");
double vtempdbl = Convert.ToDouble(number);
string amount = AmountInWords(vtempdbl);

private static string AmountInWords(double amount)
    {
        var n = (int)amount;

        if (n == 0)
            return"";
        else if (n > 0 && n <= 99)
        {
            var arr = new string[] { "??","???", "???", "???", "????","???", "???", "??",  "???", "??",  "????","????","???", "?????",   "????","????","????","????","????","???", "????","????","????","??????",  "?????",   "???????", "?????",   "????","???????", "?????",   "???????", "??????",  "???????", "???????", "????????","??????",  "?????????",   "???????", "????????","??????",  "????????","?????????",   "?????????",   "?????????",   "?????????",   "????????","?????????",   "????????","????????","??????",  "??????",  "???????", "?????????",   "???????", "????????","?????????",   "???????", "??????",  "?????",   "???", "???????", "???????", "???????", "???????", "???????", "???????", " ????????",   "???????", "???????","?????",   "???????","????????","????????","????????","????????","????????","????????","???????", "?????",   "???", "?????",   "??????",  "??????",  "??????",  "??????",  "??????",  "??????",  "?????",   "???????", "?????",   "????????","?????????",   "?????????",   "?????????",   "?????????",  "?????????",  "?????????",   "????????","?????????" };
            return arr[n - 1] +"";
        }
        else if (n >= 100 && n <= 199)
        {
            return AmountInWords(n / 100) +"?? ??" + AmountInWords(n % 100);
        }

        else if (n >= 100 && n <= 999)
        {
            return AmountInWords(n / 100) +"??" + AmountInWords(n % 100);
        }
        else if (n >= 1000 && n <= 1999)
        {
            return"?? ?????" + AmountInWords(n % 1000);
        }
        else if (n >= 1000 && n <= 99999)
        {
            return AmountInWords(n / 1000) +"?????" + AmountInWords(n % 1000);
        }
        else if (n >= 100000 && n <= 199999)
        {
            return"?? ???" + AmountInWords(n % 100000);
        }
        else if (n >= 100000 && n <= 9999999)
        {
            return AmountInWords(n / 100000) +"???" + AmountInWords(n % 100000);
        }
        else if (n >= 10000000 && n <= 19999999)
        {
            return"?? ????" + AmountInWords(n % 10000000);
        }
        else
        {
            return AmountInWords(n / 10000000) +"????" + AmountInWords(n % 10000000);
        }
    }

只需获取该字符串并使用

字符串s = txtNumber.Text.Tostring();
int i = Convert.ToInt32(s.Tostring());
它只会写完整的整数值


这是一个C#控制台应用程序,它将返回整数以及小数。


仅用于类HumanHumanFriendlyInteger()的土耳其语表示形式(Türk?e,例如,yaz?kar ?? l ???):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public static class HumanFriendlyInteger
{
    static string[] ones = new string[] {"","Bir","?ki","ü?","D?rt","Be?","Alt?","Yedi","Sekiz","Dokuz" };
    static string[] teens = new string[] {"On","On Bir","On ?ki","On ü?","On D?rt","On Be?","On Alt?","On Yedi","On Sekiz","On Dokuz" };
    static string[] tens = new string[] {"Yirmi","Otuz","K?rk","Elli","Altm??","Yetmi?","Seksen","Doksan" };
    static string[] thousandsGroups = {""," Bin"," Milyon"," Milyar" };

    private static string FriendlyInteger(int n, string leftDigits, int thousands)
    {
        if (n == 0)
        {
            return leftDigits;
        }

        string friendlyInt = leftDigits;

        if (friendlyInt.Length > 0)
        {
            friendlyInt +="";
        }

        if (n < 10)
            friendlyInt += ones[n];
        else if (n < 20)
            friendlyInt += teens[n - 10];
        else if (n < 100)
            friendlyInt += FriendlyInteger(n % 10, tens[n / 10 - 2], 0);
        else if (n < 1000)
            friendlyInt += FriendlyInteger(n % 100, ((n / 100 == 1 ?"" : ones[n / 100] +"") +"Yüz"), 0); // Yüz 1 ile ba?lang??ta"Bir" kelimesini Türk?e'de almaz.
        else
            friendlyInt += FriendlyInteger(n % 1000, FriendlyInteger(n / 1000,"", thousands + 1), 0);

        return friendlyInt + thousandsGroups[thousands];
    }

    public static string IntegerToWritten(int n)
    {
        if (n == 0)
            return"S?f?r";
        else if (n < 0)
            return"Eksi" + IntegerToWritten(-n);

        return FriendlyInteger(n,"", 0);
    }


推荐阅读