C# | Не работает вычисление из числа число

У меня есть код, в котором объявлен словарь. Ключ - название кофе, а значение - его цена. Я написал этот словарь, и дальше, мне нужно запросить у пользователя число, которое будет как скидка. Я должен вывести в консоль цены этих кофе со скидкой в таком шаблоне: Key: {Value with discount}. Я написал в цикле foreach вывод с каждой строки мой шаблон. Я добавил в значение немного математики. Но мне выводит цену: либо стандартную, либо "0". Помогите пожалуйста, вот мой код:

using System;
using System.Collections.Generic;

namespace ConsoleApp
{
    class Program
    {
        static int ComputeDiscount(int originalNumber, int discount)
        {
            return originalNumber - (originalNumber / 100 * discount);
        }
        static void Main(string[] args)
        {
            Dictionary<string, int> dict = new Dictionary<string, int>();
            dict.Add("Americano", 50);
            dict.Add("Latte", 70);
            dict.Add("Flat White", 60);
            dict.Add("Espresso", 60);
            dict.Add("Cappuccino", 80);
            dict.Add("Mocha", 90);

            var discount = Convert.ToInt32(Console.ReadLine());

            foreach (var item in dict)
            {
                Console.WriteLine($"{item.Key}: {Convert.ToInt32(item.Value) - (item.Value / 100 * discount)}");
            }
        }
    }
}


Ответы (1 шт):

Автор решения: CrazyElf
item.Value / 100 * discount

Поскольку все участвующие в выражении числа у вас целые, в результате деления на 100 числа, которое меньше 100, всегда получается 0. И дальше уже без толку этот ноль на что-то умножать, всё-равно будет ноль.

Можно поменять местами умножение и сложение:

item.Value * discount / 100

Так у вас что-то получится в итоге, но с точностью до рублей, копеек не будет. Если надо с точностью до копеек, то нужно переходить к арифметике с плавающей точкой, например, так, как предложил VladD, прямо указав, что мы делим на число с плавающей точкой 100.0:

item.Value / 100.0 * discount
→ Ссылка