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 шт):
item.Value / 100 * discount
Поскольку все участвующие в выражении числа у вас целые, в результате деления на 100 числа, которое меньше 100, всегда получается 0. И дальше уже без толку этот ноль на что-то умножать, всё-равно будет ноль.
Можно поменять местами умножение и сложение:
item.Value * discount / 100
Так у вас что-то получится в итоге, но с точностью до рублей, копеек не будет. Если надо с точностью до копеек, то нужно переходить к арифметике с плавающей точкой, например, так, как предложил VladD, прямо указав, что мы делим на число с плавающей точкой 100.0:
item.Value / 100.0 * discount