Я только начинаю изучать C# через CodeAcademy. Я должен написать программу для расчета наименьшего количества «монет» различных значений, необходимых для достижения указанной суммы. Все пошло хорошо, следуя инструкциям, но в конце упражнения вам предлагается написать еще немного кода, чтобы программа работала с десятичными входами (вместо целых чисел).
Я, по сути, скопировал тот же код, который использовался для полных сумм, с небольшими изменениями (умножив начальную сумму на 100), чтобы он все еще мог работать и давать требуемые результаты. Однако последнее значение (бронзовые центы) почему-то продолжает давать мне цифры с десятичными знаками . Я думал об использовании Math.Floor (), но после нескольких испытаний я понял, что это не всегда избыток. Кто-нибудь может помочь? Есть ли какие-то внутренние ограничения для команды Math.Floor (), о которых я должен был знать? Я только что сделал большую глупость?
tl; dr: noob кодер, интересно, почему код не делает то, что я хочу, чтобы он делал
using System;
namespace MoneyMaker
{
class MainClass
{
public static void Main(string[] args)
{
// This code is meant to divide an (user given) amount of money into coins of different values.
// First we ask for an input.
Console.WriteLine("Welcome to Money Maker!.00");
Console.WriteLine("Please enter the amount you want to divide in Coins:");
string strAmount = Console.ReadLine();
Console.WriteLine($"${strAmount} Canopy is equal to:");
double wholeAmount = Convert.ToDouble(strAmount);
// These are the values of each coin.
// The cents are multiplied by 100 for the purposes of using then in the code.
// The bronze coins are listed, but unused, since their value is essentially 1.
double gold = 10;
double silver = 5;
//double bronze = 1;
double smolGold = .1 * 100;
double smolSilver = .05 * 100;
//double smolBronze = .01 * 100;
// These lines calculate the integral values (gold, silver and bronze coins).
double douAmount = Math.Floor(wholeAmount);
double goldCoins = Math.Floor(douAmount / gold);
double silAmount = douAmount % gold;
double silverCoins = Math.Floor(silAmount / silver);
double bronzeCoins = silAmount % silver;
// These lines calculate the decimal values (gold, silver and bronze cents).
// They start by multiplying the cents by 100, rendering the rest of the lines the same as in the integral values.
double smolAmount = 100 * (wholeAmount - douAmount);
double goldCents = Math.Floor(smolAmount / smolGold);
double littleSilver = smolAmount % smolGold;
double silverCents = Math.Floor(littleSilver / smolSilver);
//ERROR: There seems to be an issue with the bronze cents, returning a value with decimals.
double bronzeCents = littleSilver % smolSilver;
// Finally, the output string with the results:
Console.WriteLine($"\n Gold Coins: {goldCoins} \n Silver Coins: {silverCoins} \n Bronze Coins: {bronzeCoins} \n Gold Cents: {goldCents} \n Silver Cents: {silverCents} \n Bronze Cents: {bronzeCents}");
}
}}