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






4.69/5 (19投票s)
将从 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;
}
关注点
目前,我仅提交了印度货币的代码。 现在,为了在第二部分中进一步发展,我还将描述如何按照印度论坛的印度导师的建议,转换为国际货币。
仅供参考,第二部分已发布。 看一下
最后但并非最不重要的一点是,感谢观众的投票和宝贵时间。
欲了解更多详情,请参阅附带的类。
历史
- 这是第一部分。 第二部分已提交用于国际货币。