Хорошо, вот что. От DataTable
i читать number_of_project и number_of_hours_per_day (большую часть времени от 5 до 7 часов в день). Для каждого проекта i insert percent_value с динамически созданным TextBoxes
(Сумма от percent_values составляет 100%). Формула для процента должна рассчитываться hours_for_project_per_day.Работа с процентом в C#
double hours_for_project_per_day = percentage_value * number_of_hours_per_day/100;
В конце концов я Round
hours_for_project_per_day. Во много раз расчет правильно, но я получаю некоторые не правильные значения (из-за Rounding
) в случае, как это:
number_of_project = 5;
number_of_hours_per_day = 7;
percentage_value | project | (Math.Round)hours_for_project_per_day (double values)
-----------------|---------|------------------------------------------------------
30 | P1 | 2 (2,1)
17 | P2 | 1 (1,19)
18 | P3 | 1 (1,26)
20 | P4 | 1 (1,4)
15 | P5 | 1 (1,05)
-------------------------------------------
sum 100 | 5 | 6 (instead 7)
Мой вопрос: Могу ли я сделать это другим способом или просто проверить, если if(sum_hours_for_project_per_day != number_of_hours_per_day)
и найдите hours_for_project_per_day с максимальным десятичным значением (в данном случае 1,4) и положите значение 2? Надеюсь, вы знаете, что я пытаюсь сделать.
Изменить 100 to 100.0 in: double hours_for_project_per_day = percent_value * number_of_hours_per_day/100; –
ну, не обойти тот факт, что сумма дробей и сумма их округлых значений различны. это просто математика :) Я бы предложил либо округлить их до 2,3, либо любые десятичные разряды (не решит вашу проблему, но уменьшит ее) или перейду с вашей второй идеей, которая мне кажется подходящей. –
Вы используете базу данных, которую вы можете запросить? – Peter