如何在C#中正确转换货币

How to properly convert currency in C#

我一直在用 c# 在 VS 上进行货币转换,我目前面临的挑战是如何正确地将美元转换为 Frank,将欧元转换为英镑再转换为 Frank,但是当我 运行 编程时,一切似乎都正常很好,直到我输入要转换为美元的金额,它才有效,当我尝试使用其他货币时,只是没有显示任何结果或引发任何异常。下面是我的程序,我尝试搜索类似的挑战但找不到适合我的情况!我是 C# 语言和社区的新手,也许这不是一个很聪明的问题,但我确实需要帮助!

class Program
    {
        public static void Main()
        {
            int ;
            double val,frank;
            Console.WriteLine("Enter your Choice :\n 1- Dollar to Frank \n 2- Euro to Frank \n 3- Sterling to Frank ");
            choice = int.Parse(Console.ReadLine());
 
             (choice)
            {
                case 1:
                    Double dollar;
                    Console.Write("Enter the Dollar Amount :");
                    dollar = Double.Parse(Console.ReadLine());
                    Console.Write("Enter the Dollar Value :");
                    val = double.Parse(Console.ReadLine());
                    frank = dollar * val;
                    Console.WriteLine("{0} Dollar Equals {1} Frank", dollar, frank);
                    break;
                case 2:
                    Double Euro;
                    Console.Write("Enter the Euro Amount :");
                    Euro  Double.Parse(Console.ReadLine());
                    Console.Write("Enter the Euro Value :");
                    val = double.Parse(Console.ReadLine());
                    frank = Euro * val;
                    Console.WriteLine("{0} Euro Equals {1} Frank", Euro, frank);
                    break;
                case 3:
                    Double sterling;
                    Console.Write("Enter the Sterling Amount :");
                    Double.Parse(Console.ReadLine());
                    Console.Write("Enter the Sterling Value :");
                    val = double.Parse(Console.ReadLine());
                    frank = sterling * val;
                    Console.WriteLine("{0} Sterling Equals {1} Frank", sterling, frank);
                    break;
            }
            Console.ReadLine();
        }
    }
 

我会尝试以更通用的方式解决这个问题,减少重复。

public static void Main()
{
    decimal EnterDecimal(string message, bool zero_allowed)
    {
        while (true)
        {
            Console.WriteLine(message);
            if (decimal.TryParse(Console.ReadLine(), out decimal value))
                if (zero_allowed || value != 0m)
                    return value;
        }
    }

    string EnterCurrency(string message)
    {
        while (true)
        {
            Console.WriteLine(message);
            string currency = Console.ReadLine().ToUpperInvariant();
            if (currency.Length == 3)
                return currency;
        }
    }

    string currency_from = EnterCurrency("Enter From Currency");
    string currency_to = EnterCurrency("Enter To Currency");
    decimal rate = EnterDecimal($"Enter exchange rate from {currency_from} to {currency_to}", false);
    decimal amount_from = EnterDecimal($"Enter the amount of {currency_from} to convert", true);
    decimal amount_to = amount_from * rate;
    Console.WriteLine($"{amount_from} {currency_from} equals {amount_to} {currency_to}");
}

此代码的典型 运行 可能是:

Enter From Currency
AUD
Enter To Currency
USD
Enter exchange rate from AUD to USD
0.7
Enter the amount of AUD to convert
100
100 AUD equals 70.0 USD

我不能 100% 确定这是否是您所要求的,但下面的代码适用于所选的 3 个中的任何一个。我试着让它尽可能简单,并且尽可能像您的代码一样。

internal class Promena
    {
        public static void Main()
        {
            decimal val, frank;
            Console.WriteLine("Enter your choice :\n 1- Dollar to Frank \n 2- Euro to Frank \n 3- Sterling to Frank");

            int choice = int.Parse(Console.ReadLine());

            if(choice == 1 )
            {
                decimal dollar;
                Console.WriteLine("Enter the Dollar amount : ");
                dollar = int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the Dollar value:");
                val = decimal.Parse(Console.ReadLine());
                frank = dollar * val;
                Console.WriteLine("Amount of "+dollar+" Dollars = " + frank + " Franks");
            }
            else if(choice == 2 )
            {
                decimal euro;
                Console.WriteLine("Enter the Euro amount : ");
                euro = int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the Dollar value:");
                val = decimal.Parse(Console.ReadLine());
                frank = euro * val;
                Console.WriteLine("Amount of " + euro + " Euros = " + frank + " Franks");
            }
            else if(choice == 3 )
            {
                decimal sterling;
                Console.WriteLine("Enter the Sterling amount : ");
                sterling = int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the Dollar value:");
                val = decimal.Parse(Console.ReadLine());
                frank = sterling * val;
                Console.WriteLine("Amount of " + sterling + " Euros = " + frank + " Franks");
            }
        }
    }