C# 孟加拉国货币的文字翻译

C# 孟加拉国货币的文字翻译,c#,asp.net,C#,Asp.net,问题:当我输入文本1,如20或20000或2000000,然后分别显示Taka only或QUANK Taka only或Lac Taka only。但应分别显示两万或两万或二十个Lac。这可能回答您的问题。看起来你正试图做同样的事情,只是用一种更复杂的方式 我不确定你是不是这么说的,但我会试试看: private string BDTtakatowords(Int64 BDTtaka) { string result=""; if ((BDTtaka >= 1)

问题:当我输入文本1,如20或20000或2000000,然后分别显示Taka only或QUANK Taka only或Lac Taka only。但应分别显示两万或两万或二十个Lac。

这可能回答您的问题。看起来你正试图做同样的事情,只是用一种更复杂的方式

我不确定你是不是这么说的,但我会试试看:

 private string BDTtakatowords(Int64 BDTtaka)
 {
     string result="";
     if ((BDTtaka >= 1) && (BDTtaka <= 10))
     {
         if ((BDTtaka % 10) == 1) result = "One";
         if ((BDTtaka % 10) == 2) result = "Two";
         if ((BDTtaka % 10) == 3) result = "Three";
         if ((BDTtaka % 10) == 4) result = "Four";
         if ((BDTtaka % 10) == 5) result = "Five";
         if ((BDTtaka % 10) == 6) result = "Six";
         if ((BDTtaka % 10) == 7) result = "Seven";
         if ((BDTtaka % 10) == 8) result = "Eight";
         if ((BDTtaka % 10) == 9) result = "Nine";
         if ((BDTtaka % 10) == 0) result = "Ten";
     }
     if (BDTtaka > 9 && BDTtaka < 20)
     {
         if (BDTtaka == 11) result = "Eleven";
         if (BDTtaka == 12) result = "Twelve";
         if (BDTtaka == 13) result = "Thirteen";
         if (BDTtaka == 14) result = "Forteen";
         if (BDTtaka == 15) result = "Fifteen";
         if (BDTtaka == 16) result = "Sixteen";
         if (BDTtaka == 17) result = "Seventeen";
         if (BDTtaka == 18) result = "Eighteen";
         if (BDTtaka == 19) result = "Nineteen";
        if (BDTtaka == 20) result = "Twenty";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 2 && (BDTtaka % 10) == 0) result = "Twenty";
     if (BDTtaka > 20 && (BDTtaka / 10) == 3 && (BDTtaka % 10) == 0) result = "Thirty";
     if (BDTtaka > 20 && (BDTtaka / 10) == 4 && (BDTtaka % 10) == 0) result = "Forty";
     if (BDTtaka > 20 && (BDTtaka / 10) == 5 && (BDTtaka % 10) == 0) result = "Fifty";
     if (BDTtaka > 20 && (BDTtaka / 10) == 6 && (BDTtaka % 10) == 0) result = "Sixty";
     if (BDTtaka > 20 && (BDTtaka / 10) == 7 && (BDTtaka % 10) == 0) result = "Seventy";
     if (BDTtaka > 20 && (BDTtaka / 10) == 8 && (BDTtaka % 10) == 0) result = "Eighty";
     if (BDTtaka > 20 && (BDTtaka / 10) == 9 && (BDTtaka % 10) == 0) result = "Ninty";

     if (BDTtaka > 20 && (BDTtaka / 10) == 2 && (BDTtaka % 10) != 0)
     {
        if ((BDTtaka % 10) == 0) result = "Twenty";
         if ((BDTtaka % 10) == 1) result = "Twenty One";
         if ((BDTtaka % 10) == 2) result = "Twenty Two";
         if ((BDTtaka % 10) == 3) result = "Twenty Three";
         if ((BDTtaka % 10) == 4) result = "Twenty Four";
         if ((BDTtaka % 10) == 5) result = "Twenty Five";
         if ((BDTtaka % 10) == 6) result = "Twenty Six";
         if ((BDTtaka % 10) == 7) result = "Twenty Seven";
         if ((BDTtaka % 10) == 8) result = "Twenty Eight";
         if ((BDTtaka % 10) == 9) result = "Twenty Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 3 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Thirty One";
         if ((BDTtaka % 10) == 2) result = "Thirty Two";
         if ((BDTtaka % 10) == 3) result = "Thirty Three";
         if ((BDTtaka % 10) == 4) result = "Thirty Four";
         if ((BDTtaka % 10) == 5) result = "Thirty Five";
         if ((BDTtaka % 10) == 6) result = "Thirty Six";
         if ((BDTtaka % 10) == 7) result = "Thirty Seven";
         if ((BDTtaka % 10) == 8) result = "Thirty Eight";
         if ((BDTtaka % 10) == 9) result = "Thirty Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 4 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Forty One";
         if ((BDTtaka % 10) == 2) result = "Forty Two";
         if ((BDTtaka % 10) == 3) result = "Forty Three";
         if ((BDTtaka % 10) == 4) result = "Forty Four";
         if ((BDTtaka % 10) == 5) result = "Forty Five";
         if ((BDTtaka % 10) == 6) result = "Forty Six";
         if ((BDTtaka % 10) == 7) result = "Forty Seven";
         if ((BDTtaka % 10) == 8) result = "Forty Eight";
         if ((BDTtaka % 10) == 9) result = "Forty Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 5 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Fifty One";
         if ((BDTtaka % 10) == 2) result = "Fifty Two";
         if ((BDTtaka % 10) == 3) result = "Fifty Three";
         if ((BDTtaka % 10) == 4) result = "Fifty Four";
         if ((BDTtaka % 10) == 5) result = "Fifty Five";
         if ((BDTtaka % 10) == 6) result = "Fifty Six";
         if ((BDTtaka % 10) == 7) result = "Fifty Seven";
         if ((BDTtaka % 10) == 8) result = "Fifty Eight";
         if ((BDTtaka % 10) == 9) result = "Fifty Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 6 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Sixty One";
         if ((BDTtaka % 10) == 2) result = "Sixty Two";
         if ((BDTtaka % 10) == 3) result = "Sixty Three";
         if ((BDTtaka % 10) == 4) result = "Sixty Four";
         if ((BDTtaka % 10) == 5) result = "Sixty Five";
         if ((BDTtaka % 10) == 6) result = "Sixty Six";
         if ((BDTtaka % 10) == 7) result = "Sixty Seven";
         if ((BDTtaka % 10) == 8) result = "Sixty Eight";
         if ((BDTtaka % 10) == 9) result = "Sixty Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 7 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Seventy One";
         if ((BDTtaka % 10) == 2) result = "Seventy Two";
         if ((BDTtaka % 10) == 3) result = "Seventy Three";
         if ((BDTtaka % 10) == 4) result = "Seventy Four";
         if ((BDTtaka % 10) == 5) result = "Seventy Five";
         if ((BDTtaka % 10) == 6) result = "Seventy Six";
         if ((BDTtaka % 10) == 7) result = "Seventy Seven";
         if ((BDTtaka % 10) == 8) result = "Seventy Eight";
         if ((BDTtaka % 10) == 9) result = "Seventy Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 8 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Eighty One";
         if ((BDTtaka % 10) == 2) result = "Eighty Two";
         if ((BDTtaka % 10) == 3) result = "Eighty Three";
         if ((BDTtaka % 10) == 4) result = "Eighty Four";
         if ((BDTtaka % 10) == 5) result = "Eighty Five";
         if ((BDTtaka % 10) == 6) result = "Eighty Six";
         if ((BDTtaka % 10) == 7) result = "Eighty Seven";
         if ((BDTtaka % 10) == 8) result = "Eighty Eight";
         if ((BDTtaka % 10) == 9) result = "Eighty Nine";
     }
     if (BDTtaka > 20 && (BDTtaka / 10) == 9 && (BDTtaka % 10) != 0)
     {
         if ((BDTtaka % 10) == 1) result = "Ninty One";
         if ((BDTtaka % 10) == 2) result = "Ninty Two";
         if ((BDTtaka % 10) == 3) result = "Ninty Three";
         if ((BDTtaka % 10) == 4) result = "Ninty Four";
         if ((BDTtaka % 10) == 5) result = "Ninty Five";
         if ((BDTtaka % 10) == 6) result = "Ninty Six";
         if ((BDTtaka % 10) == 7) result = "Ninty Seven";
         if ((BDTtaka % 10) == 8) result = "Ninty Eight";
         if ((BDTtaka % 10) == 9) result = "Ninty Nine";
     }
     return result;
 }

 protected void Button1_Click(object sender, System.EventArgs e)
 {
     TextBox2.Text = BDTtaka(Convert.ToInt64(TextBox1.Text));
 }

把这个扔到野外然后躲开:

//this array specifies the names of the powers of 10
static Tuple<int, string>[] powers =
{ 
    new Tuple<int, string>(0, ""),
    new Tuple<int, string>(3, "thousand"),
    new Tuple<int, string>(5, "lac"),
    new Tuple<int, string>(7, "crore")
};

//this array specifies the digits' names
static string[] digits = { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
static string[] extendedDigits = { "ten", "eleven", "twelve", "thirteen", "fourteen", "fivteen", "sixteen", "seventeen", "eighteen", "nineteen" };
static string[] tensWords = { "", "", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };

private static string NumberToWords(long number)
{
    var sb = new StringBuilder();

    //begin with the left most digit (greatest power of 10)
    for (int i = powers.Length - 1; i >= 0; --i)
    {
        //translate the current part only (for a known power of 10)
        //usually part is a 3-digit number
        int part = (int)(number / (long)Math.Pow(10, powers[i].Item1)); 
        //if the part is 0, we don't have to add anything
        if (part > 0)
        {
            //extract the hundreds
            int hundreds = part / 100;
            if(hundreds > 9)
                throw new ArgumentException(number + " is too large and cannot be expressed.");
            if (hundreds > 0)
            {
                //if there are hundreds, copy them to the output
                sb.Append(digits[hundreds]);
                sb.Append(" hundred ");
            }
            //convert the next two digits
            sb.Append(TwoDigitNumberToWord(part % 100));
            sb.Append(" ");
            //and append the name of the power of 10
            sb.Append(powers[i].Item2);
            sb.Append(" ");
            //subtract the currently managed part
            number -= part * (long)Math.Pow(10, powers[i].Item1);
        }
    }
    return sb.ToString();
}

private static string TwoDigitNumberToWord(int number)
{
    //one digit case
    if (number < 10)
        return digits[number];
    //special case 10 <= n <= 19
    if (number < 20)
        return extendedDigits[number - 10];
    int tens = number / 10;
    int ones = number % 10;
    //concatenate the word from the two digits' words
    return tensWords[tens] + " " + digits[ones];
}

我不能回答你的问题,因为我不太明白,也许是因为我对孟加拉国货币缺乏了解,但如果你用一个包含99个元素的简单数词数组来代替你复杂且有点麻烦的if语句集合,你会更好。对于我们的孟加拉货币来说,1=一塔卡,10=十塔卡,100=一百塔卡,1000=一千塔卡,99000=九万九千塔卡,100000=一拉克塔卡,1000000=十拉克塔卡,10000000=一克洛尔塔卡我以前一直负责维护这样的代码。为了您和您的继任者的理智,请花时间简化此代码。一旦你这样做了,我想你会发现你的问题更容易回答,因为这将是你用来简化原始方法的模式的自然延伸。
static string hundreds(Int64 n)
{
    n %= 100;
    switch (n)
    {
    case 0:
        return "zero";
    case 10:
        return "ten";
    case 11:
        return "eleven";
    case 12:
        return "twelve";
    case 13:
        return "thirteen";
    case 14:
        return "fourteen";
    case 15:
        return "fifteen";
    case 16:
        return "sixteen";
    case 17:
        return "seventeen";
    case 18:
        return "eighteen";
    case 19:
        return "nineteen";
    }

    string s = "";
    switch (n / 10)
    {
    case 2:
        s = "twenty";
        break;
    case 3:
        s = "thirty";
        break;
    case 4:
        s = "fourty";
        break;
    case 5:
        s = "fifty";
        break;
    case 6:
        s = "sixty";
        break;
    case 7:
        s = "seventy";
        break;
    case 8:
        s = "eighty";
        break;
    case 9:
        s = "ninety";
        break;
    }

    if (n/10 > 0 && n%10 > 0)
        s += " ";

    switch (n % 10)
    {
    case 1:
        s += "one";
        break;
    case 2:
        s += "two";
        break;
    case 3:
        s += "three";
        break;
    case 4:
        s += "four";
        break;
    case 5:
        s += "five";
        break;
    case 6:
        s += "six";
        break;
    case 7:
        s += "seven";
        break;
    case 8:
        s += "eight";
        break;
    case 9:
        s += "nine";
        break;
    }

    return s;
}

static string thousands(Int64 n)
{
    string s = "";
    int h = (int)(n%1000)/100;
    if (h > 0)
    {
        s += hundreds(h) + " hundred";
        int r = (int)n % 100;
        if (r == 0)
            return s;

        if (r > 0 && r < 10 && !string.IsNullOrEmpty(s))
            s += " and ";
        else if (!string.IsNullOrEmpty(s) && r > 0)
            s += " ";
    }
    return s + hundreds(n);
}

static string milionths(Int64 n)
{
    string s = "";
    int t = (int)(n%10000000)/1000;
    if (t > 0 && t < 100)
    {
        s += hundreds(t) + " thousand";
    }
    else
    {
        t /= 100;
        if (t > 0)
            s += hundreds(t) + " lac";
    }
    int r = (int)n % 1000;
    if (r == 0)
        return s;

    if (r > 0 && r < 10 && !string.IsNullOrEmpty(s))
        s += " and ";
    else if (!string.IsNullOrEmpty(s) && r > 0)
        s += " ";

    return s + thousands(n);
}

static string crore(Int64 n)
{
    string s = "";
    Int64 m = n/10000000;
    if (m > 0)
    {
        s += thousands(m) + " crore";
        int r = (int)n % 10000000;
        if (r == 0)
            return s;

        if (r > 0 && r < 10 && !string.IsNullOrEmpty(s))
            return s + " and one";
        else if (!string.IsNullOrEmpty(s) && r > 0)
            s += " ";
    }
    return s + milionths(n);
}

static void Main(string[] args)
{
    System.Console.WriteLine(crore(9999));
    System.Console.WriteLine(crore(10000));
    System.Console.WriteLine(crore(10100));
    System.Console.WriteLine(crore(10101));
    System.Console.WriteLine(crore(99999));
    System.Console.WriteLine(crore(100000));
    System.Console.WriteLine(crore(100001));
    System.Console.WriteLine(crore(1000000));
    System.Console.WriteLine(crore(10000000));
    System.Console.WriteLine(crore(10000001));

    System.Console.ReadLine();
}
nine thousand nine hundred ninety nine
ten thousand
ten thousand one hundred
ten thousand one hundred and one
ninety nine thousand nine hundred ninety nine
one lac
one lac and one
ten lac
one crore
one crore and one