将钱输入转换成硬币

时间:2020-01-16 04:22:49

标签: c#

ive刚刚在c#上启动了一些类,并已分配了以下规则: 提示用户输入美元和美分的金额。例如1.18 -显示四分之一硬币,十角硬币,镍币和几美分硬币的数量

示例如果他们输入2.16,则应显示: 8个季度,1个角钱,1个镍币,1个便士

我遇到的问题是,只有当他们整体输入货币值时,这似乎才起作用。因此,如果他们想输入$ 1.18,他们将输入118,它将正常工作,但是一旦他们输入1.18,它就会崩溃。另一个例子是,如果他们以$ 7.65的价格输入765,它将正常工作,但是,如果他们将其正确键入为7.65,它将失败。对于the脚的问题表示抱歉,我是超级新人,感谢您的帮助!

         int totalCash;
            Console.WriteLine("input money");
            string moneyString = Console.ReadLine();
            totalCash = int.Parse(moneyString);
            int quarter = totalCash / 25;
            totalCash %= 25;
            int dime = totalCash / 10;
            totalCash %= 10;
            int nickel = totalCash / 5;
            totalCash %= 5;
            int penny = totalCash / 1;
            totalCash %= 1;

            Console.WriteLine("{0} quarters, {1} dimes, {2} nickels, {3} pennies", quarter, dime, nickel, penny);
           ```


2 个答案:

答案 0 :(得分:1)

有很多方法可以得到结果,但这是我尝试过的最好的方法:

public static string ConvertMoneyIntoCoins(double money)
    {
        int cents = (int)(Math.Round(money, 2) * 100);

        var coins = new[] {
                            new { Name = "Quarters", Value = 25 }, new { Name = "Dimes", Value = 10 },
                            new { Name = "Nickels", Value = 5 }, new { Name = "Pennies", Value = 1 } 
                         };

        var changes = coins.Select(coin => new { Amt = Math.DivRem(cents, coin.Value, out cents), Coin = coin }).Where(x => x.Amt != 0).ToList();

        var strBld = new StringBuilder();

        foreach (var change in changes)
        {
            strBld.Append(change.Amt + " " + change.Coin.Name + ", ");
        }

        return strBld.ToString();
    }

答案 1 :(得分:0)

输入整数应该起作用,这是您要注意的线索。如果您假设整数是美元,则无法按整数模数。您所有的除数都太大了100。当您这样做时,您会注意到您也使用了错误的数据类型。请注意,我不同意在调试时使用tryparse,因为它会出错。您应该在调试模式下运行它,然后您将获得实际的堆栈跟踪以及崩溃的行。