65.9K
CodeProject 正在变化。 阅读更多。
Home

将数字货币转换为文字(仅限印度货币)(优化版)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (19投票s)

2010年9月1日

CPOL

3分钟阅读

viewsIcon

215470

downloadIcon

2297

将从 0(零)到 10^39(adant-shinghar)的数字转换为文字。 例如:70250 转换为 七万零二百五十

引言

这是一个简单的程序,或者说一个复杂的程序,它可以将从 0 到 1039 的数值转换为文字;... 太棒了!!!

简短介绍

它可以将 0 转换为零,也可以将 12345 转换为“一万两千三百四十五”,还可以将 1039 转换为 1 Adant-Shinghar。(感谢:维基百科为我提供了这些符号。)

在您继续之前,请先告知您,这个类将以附加了 HTML 标签的 string 形式返回一个值,因此请将其用于 Web 应用程序,这样您会得到干净整洁的结果。如果要在 Windows Forms 中使用它,请进行必要的更改。

所以,伙计们,让我们深入了解逻辑!!!

背景

以下提供了一个快照,以获得以下结果。

Using the Code

让我们逐步深入研究代码。

步骤 1

取三个 static List<DictionaryEntry> 类型的对象用于静态数据存储,并在类的构造函数中加载它们。

看一下代码片段。

类的构造函数

namespace Hirs.IndianNumericToWordConverter
{
    public class IndiaCurrencyConverter
    {
        private Hashtable htPunctuation;
        private Dictionary<int> DictStaticSuffix;
        private Dictionary<int> DictStaticPrefix;
        private Dictionary<int> DictHelpNotation;
        private System.Drawing.Color color;

        public IndiaCurrencyConverter()
        {
            htPunctuation = new Hashtable();
            DictStaticPrefix = new Dictionary<int>();
            DictStaticSuffix = new Dictionary<int>();
            DictHelpNotation = new Dictionary<int>();
            Native = native;
            LoadStaticPrefix();
            LoadStaticSuffix();
            LoadHelpofNotation();
        }

这是加载 static 数据的函数。

private void LoadStaticSuffix()
        {
            DictStaticSuffix.Add(1, "One ");
            DictStaticSuffix.Add(2, "Two ");
            DictStaticSuffix.Add(3, "Three ");
            DictStaticSuffix.Add(4, "Four ");
            DictStaticSuffix.Add(5, "Five ");
            DictStaticSuffix.Add(6, "Six ");
            DictStaticSuffix.Add(7, "Seven ");
            DictStaticSuffix.Add(8, "Eight ");
            DictStaticSuffix.Add(9, "Nine ");
            DictStaticSuffix.Add(10, "Ten ");
            DictStaticSuffix.Add(11, "Eleven ");
            DictStaticSuffix.Add(12, "Twelve ");
            DictStaticSuffix.Add(13, "Thirteen ");
            DictStaticSuffix.Add(14, "Fourteen ");
            DictStaticSuffix.Add(15, "Fifteen ");
            DictStaticSuffix.Add(16, "Sixteen ");
            DictStaticSuffix.Add(17, "Seventeen ");
            DictStaticSuffix.Add(18, "Eighteen ");
            DictStaticSuffix.Add(19, "Nineteen ");
            DictStaticSuffix.Add(20, "Twenty ");
            DictStaticSuffix.Add(30, "Thirty ");
            DictStaticSuffix.Add(40, "Forty ");
            DictStaticSuffix.Add(50, "Fifty ");
            DictStaticSuffix.Add(60, "Sixty ");
            DictStaticSuffix.Add(70, "Seventy ");
            DictStaticSuffix.Add(80, "Eighty ");
            DictStaticSuffix.Add(90, "Ninety ");
        }
        private void LoadStaticPrefix()
        {
                DictStaticPrefix.Add(2, "Thousand ");
                DictStaticPrefix.Add(3, "Lac ");
                DictStaticPrefix.Add(4, "Crore ");
                DictStaticPrefix.Add(5, "Arab ");
                DictStaticPrefix.Add(6, "Kharab ");
                DictStaticPrefix.Add(7, "Neel ");
                DictStaticPrefix.Add(8, "Padma ");
                DictStaticPrefix.Add(9, "Shankh ");
                DictStaticPrefix.Add(10, "Maha-shankh ");
                DictStaticPrefix.Add(11, "Ank ");
                DictStaticPrefix.Add(12, "Jald ");
                DictStaticPrefix.Add(13, "Madh ");
                DictStaticPrefix.Add(14, "Paraardha ");
                DictStaticPrefix.Add(15, "Ant ");
                DictStaticPrefix.Add(16, "Maha-ant ");
                DictStaticPrefix.Add(17, "Shisht ");
                DictStaticPrefix.Add(18, "Singhar ");
                DictStaticPrefix.Add(19, "Maha-singhar ");
                DictStaticPrefix.Add(20, "Adant-singhar ");
        }
        private void LoadHelpofNotation()
        {
            DictHelpNotation.Add(2, "=1,000 (3 Trailing Zeros)");
                DictHelpNotation.Add(3, "=1,00,000 (5 Trailing Zeros)");
                DictHelpNotation.Add(4, "=1,00,00,000 (7 Trailing Zeros)");
                DictHelpNotation.Add(5, "=1,00,00,00,000 (9 Trailing Zeros)");
                DictHelpNotation.Add(6, "=1,00,00,00,00,000 (11 Trailing Zeros)");
                DictHelpNotation.Add(7, "=1,00,00,00,00,00,000 (13 Trailing Zeros)");
                DictHelpNotation.Add(8, "=1,00,00,00,00,00,00,000 (15 Trailing Zeros)");
                DictHelpNotation.Add
		(9, "=1,00,00,00,00,00,00,00,000 (17 Trailing Zeros)");
                DictHelpNotation.Add(10, "=1,00,00,00,00,00,00,00,00,000 
					(19 Trailing Zeros)");
                DictHelpNotation.Add(11, "=1,00,00,00,00,00,00,00,00,00,000 
					(21 Trailing Zeros)");
                DictHelpNotation.Add(12, "=1,00,00,00,00,00,00,00,00,00,00,000 
					(23 Trailing Zeros)");
                DictHelpNotation.Add(13, "=1,00,00,00,00,00,00,00,00,00,00,00,000 
					(25 Trailing Zeros)");
                DictHelpNotation.Add(14, "=1,00,00,00,00,00,00,00,00,00,00,00,00,000 
					(27 Trailing Zeros)");
                DictHelpNotation.Add(15, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(29 Trailing Zeros)");
                DictHelpNotation.Add
		(16, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(31 Trailing Zeros)");
                DictHelpNotation.Add
		(17, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(33 Trailing Zeros)");
                DictHelpNotation.Add
		(18, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(35 Trailing Zeros)");
                DictHelpNotation.Add
		(19, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(37 Trailing Zeros)");
                DictHelpNotation.Add
		(20, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(39 Trailing Zeros)");
            }

我收到了关于 List<DictionaryEntry> listHelpNotation 的注释,原因是在悬停时您可以获得帮助及其单位值。

第二步

现在插入输入值(请注意,输入值将是 string ,因为没有数据类型支持 1039)。

假设输入值为 123456789。

首先反转输入字符串

(987654321)

然后分割并将反向字符串插入到哈希表中(前 3 位数字,然后每 2 位数字直到结尾)

(987,65,43,21)

然后反转插入到哈希表中的每个分割值,使其真正有意义。

(789,56,34,12)

然后使用以下代码将它插入到哈希表中,使用键值对

private void InsertToPunctuationTable(string strValue)
        {
            htPunctuation.Add(1, strValue.Substring(0, 3).ToString());
            int j = 2;
            for (int i = 3; i < strValue.Length; i = i + 2)
            {
                if (strValue.Substring(i).Length > 0)
                {
                    if (strValue.Substring(i).Length >= 2)
                        htPunctuation.Add(j, strValue.Substring(i, 2).ToString());
                    else
                        htPunctuation.Add(j, strValue.Substring(i, 1).ToString());
                }
                else
                    break;
                j++;

            }
        }

现在获取哈希表中存储的每个值的文字表示,降序排列。

看一下代码。

这是函数

GetWordConversion(string inputNumber)

它接受 Stringconverted 数值并给出其文字转换,它将接受最多 3 位数字的输入。 您可能还记得,上方的哈希表中的条目具有最大为 3 位数字的值。

条件检查的解释

if (int.Parse(inputNumber.Substring(0, 1)) > 0)

检查第一位数字是否不为零,然后返回百位表示法。 例如:434,然后它返回 四百

string TempString = StaticSuffixFind(inputNumber.Substring(1, 2));

此条件检查两位值是否已存储在 List 中。 例如,它将返回十二,输入为 12。而不是返回一二,如果是 34,则找不到存储的值,它将通过条件 if(tempString == "") 并继续。 如果数字是两位数或一位数,将应用不同的条件。

private string GetWordConversion(string inputNumber)
        {
            string ToReturnWord = String.Empty;
            if (inputNumber.Length <= 3 && inputNumber.Length > 0)
            {
                if (inputNumber.Length == 3)
                {
                    if (int.Parse(inputNumber.Substring(0, 1)) > 0)
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(0, 1)) + "Hundred ";

                    string TempString = StaticSuffixFind(inputNumber.Substring(1, 2));

                    if (TempString == "")
                    {
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(1, 1) + "0");
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(2, 1));
                    }
                    ToReturnWord = ToReturnWord + TempString;
                }
                if (inputNumber.Length == 2)
                {
                    string TempString = StaticSuffixFind(inputNumber.Substring(0, 2));
                    if (TempString == "")
                    {
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(0, 1) + "0");
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(1, 1));
                    }
                    ToReturnWord = ToReturnWord + TempString;
                }
                if (inputNumber.Length == 1)
                {
                    ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(0, 1));
                }
            }
            return ToReturnWord;
        }

之后,从分割的哈希表值及其表示法中附加以下分割的单词,并创建一个大的 string ,它将描述整个表示法

private string ReturnHashtableValue()
        {
            string strFinalString = String.Empty;
            for (int i = htPunctuation.Count; i > 0; i--)
            {
                if (GetWordConversion((htPunctuation[i]).ToString()) != "")
                    strFinalString = strFinalString +
			GetWordConversion((htPunctuation[i]).ToString()) +
			StaticPrefixFind((i).ToString());
            }
            return strFinalString;
        }

关注点

目前,我仅提交了印度货币的代码。 现在,为了在第二部分中进一步发展,我还将描述如何按照印度论坛的印度导师的建议,转换为国际货币。

仅供参考,第二部分已发布。 看一下

最后但并非最不重要的一点是,感谢观众的投票和宝贵时间。

欲了解更多详情,请参阅附带的类。

历史

  • 这是第一部分。 第二部分已提交用于国际货币。
© . All rights reserved.