Проценты от процента
Есть 5 значений:
{1, 20.0%}
{2, 20.0%}
{3, 20.0%}
{4, 20.0%}
{5, 20.0%}
В сумме всегда должно быть 100.0%
Есть переменная в процентах - 41.0%
Нужно прибавить к значению 1, процент переменной от процента значения 1, к значению 1 и высчитать из остальных четырех значений в равной степени, что бы в сумме осталось 100.0%
Простой пример:
переменная 20
1 - 50
2 - 50
вычитаем из первого значения переменную и прибавляем к второму значению.
Получаем -
1 - 30
2 - 70
Как это сделать ?
static void Main(string[] args)
{
Dictionary<int, double> result = new();
Dictionary<int, double> dict = new Dictionary<int, double>
{
{ 0, 15 },
{ 1, 15 },
{ 2, 8 },
{ 3, 10 },
{ 4, 52 }
};
double total = 0;
double x = 41d;
double t = x / 4d;
foreach (var d in dict)
{
if (d.Key == 0)
{
double value = d.Value + (d.Value * x / 100);
result.Add(0, value);
}
if (d.Key == 1)
{
double value = d.Value - (d.Value * t / 100);
result.Add(1, value);
}
if (d.Key == 2)
{
double value = d.Value - (d.Value * t / 100);
result.Add(2, value);
}
if (d.Key == 3)
{
double value = d.Value - (d.Value * t / 100);
result.Add(3, value);
}
if (d.Key == 4)
{
double value = d.Value - (d.Value * t / 100);
result.Add(4, value);
}
}
foreach (var r in result)
{
total += r.Value;
Console.WriteLine($"{r.Key} {r.Value}");
}
Console.WriteLine($"Total - {total}");
Console.ReadLine();
}
0 21,15
1 13,4625
2 7,18
3 8,975
4 46,67
Total - 97,4375
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
Вы в последнем комментарии всё правильно написали, осталось только это запрограммировать:
using System;
using System.Collections.Generic;
namespace NsPercents {
class Percents {
static void Main() {
var result = new Dictionary<int, double>();
var dict = new Dictionary<int, double>
{
{ 0, 15 },
{ 1, 15 },
{ 2, 8 },
{ 3, 10 },
{ 4, 52 }
};
double total = 0;
double x = 41;
double t = 0;
foreach (var d in dict)
{
if (d.Key == 0)
{
t = d.Value * x / 100;
double value = d.Value + t;
result.Add(0, value);
}
if (d.Key == 1)
{
double value = d.Value - t / 4;
result.Add(1, value);
}
if (d.Key == 2)
{
double value = d.Value - t / 4;
result.Add(2, value);
}
if (d.Key == 3)
{
double value = d.Value - t / 4;
result.Add(3, value);
}
if (d.Key == 4)
{
double value = d.Value - t / 4;
result.Add(4, value);
}
}
foreach (var r in result)
{
total += r.Value;
Console.WriteLine("{0} {1}", r.Key, r.Value);
}
Console.WriteLine("Total - {0}", total);
Console.ReadLine();
}
}
}
0 21,15
1 13,4625
2 6,4625
3 8,4625
4 50,4625
Total - 100
И немного улучшить:
using System;
using System.Collections.Generic;
namespace NsPercents {
class Percents {
static void Main() {
var dict = new double[5] { 15, 15, 8, 10, 52 };
var result = new double[5];
double x = 41;
double t = dict[0] * x / 100, total = result[0] = dict[0] + t;
t /= 4;
for (int i = 1; i < 5; i++) total += result[i] = dict[i] - t;
for (int i = 0; i < 5; i++) Console.WriteLine("{0} {1}", i, result[i]);
Console.WriteLine("Total - {0}", total);
Console.ReadLine();
}
}
}
Нужно было бы проверять, что в результате доля не становится отрицательной.