首页 > 解决方案 > 将输入的货币转换为硬币

问题描述

我刚刚开始了一些关于 c# 的课程,并被分配了一个具有以下规则的作业:提示用户输入美元和美分的数量。例如 1.18 - 显示获得该金额的 25 美分、硬币、镍和便士的数量

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

我遇到的问题是,这似乎只有在他们输入整个货币价值时才有效。因此,如果他们想输入 $1.18,他们会输入 118,它会正常工作,但是一旦他们输入 1.18,它就会崩溃。另一个例子是,如果他们以 7.65 美元的价格输入 765,它会正常工作,但是如果他们正确地将其输入为 7.65,它将失败。抱歉这个蹩脚的问题,我超级新,谢谢你的帮助!

         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);
           ```


标签: c#

解决方案


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

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();
    }

推荐阅读