Работа с процентом в c # - PullRequest
       14

Работа с процентом в c #

2 голосов
/ 21 февраля 2012

Хорошо, вот в чем дело. С DataTable я читаю number_of_project и number_of_hours_per_day (чаще всего от 5 до 7 часов в день). Для каждого проекта я вставляю процентное_значение с динамически созданным TextBoxes (Сумма всех процент_значений равна 100%). Формула для процента должна вычислять hours_for_project_per_day .

 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? Надеюсь, ты знаешь, что я пытаюсь сделать.

1 Ответ

9 голосов
/ 21 февраля 2012

Только округляет информацию для вывода в ваш пользовательский интерфейс.

Вы должны выполнять все вычисления с округленными числами.

Редактировать В ответ на тот факт, что вы должны хранить округленные значения в БД на основе входных данных в процентном стиле, я бы назвал это недостатком в требованиях. В конце дня каким-то образом должно быть принято решение о том, где выделять дополнительное время, это лучше всего делать пользователям - и самый простой способ сделать это - назначить им целые часы.

Если это невозможно, я бы склонялся к тому, чтобы пользователь подсказывал, что ему нужно выбрать, какое значение увеличить - есть аргумент, что, возможно, было бы лучше увеличить значение 2,1 вместо 1, 4 значения. Это деловое решение, но не техническое.

...