c# - 将输入的货币转换为硬币
问题描述
我刚刚开始了一些关于 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);
```
解决方案
有很多方法可以得到结果,但这是我尝试过的最好的方法:
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();
}
推荐阅读
- r - 随机化宏
- python - 跨度类中的Python解析字符串
- android - 如何从 Firebase Storage 获取 URL 并将其发送到数据库?
- c# - JsonConvert.DeserializeObject
() 正在添加一组额外的花括号 - java - 从 maven-Selenium 测试中获取初始化程序错误中的异常
- ios - 更新到 Xcode 11.4、Swift 5.2 后 Swift -Enum 重新声明错误
- azure - 在浏览器中缓存 Azure 提供的图像
- python-3.x - 字节和 base64 格式 (Python3)
- python - Python3:自定义排序
- google-cloud-platform - GCE 仅显示 ~15% 的使用率,但顶部显示 ~99%