2012-02-21 3 views
2

Хорошо, вот что. От 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; 

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

+0

Изменить 100 to 100.0 in: double hours_for_project_per_day = percent_value * number_of_hours_per_day/100; –

+1

ну, не обойти тот факт, что сумма дробей и сумма их округлых значений различны. это просто математика :) Я бы предложил либо округлить их до 2,3, либо любые десятичные разряды (не решит вашу проблему, но уменьшит ее) или перейду с вашей второй идеей, которая мне кажется подходящей. –

+0

Вы используете базу данных, которую вы можете запросить? – Peter

ответ

9

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

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

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

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

+0

Это действительно хороший совет. +1 – ken2k

+0

Проблема в том, что я должен вставлять округленные значения в базу данных. – JanOlMajti

+0

Вы правы, я обрушиваю 2.1, это более логично. Хорошие советы, спасибо. – JanOlMajti