在c#中使用百分比

Jan*_*jti 2 c# math rounding

好的,这就是事情.从DataTable我读取number_of_projectnumber_of_hours_per_day(大部分时间每天5到7小时).对于每个项目,我在动态创建时插入percentage_valueTextBoxes(Sum off all percentage_values为100%).百分比公式必须计算hours_for_project_per_day.

 double hours_for_project_per_day = percentage_value * number_of_hours_per_day / 100;
Run Code Online (Sandbox Code Playgroud)

最后我是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)
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以通过其他方式执行此操作,或者只是检查是否 if(sum_hours_for_project_per_day != number_of_hours_per_day)找到具有最大十进制值的hours_for_project_per_day(在这种情况下为1,4)并将值2设置为?希望你知道我在做什么.

dic*_*ice 9

仅将输出信息四舍五入到用户界面.

您应该使用非舍入数字执行所有计算.

编辑 为了响应您必须根据百分比样式输入将舍入值存储在数据库中的事实,我将其称为需求中的缺陷.在某一天结束时,必须决定在何处分配额外时间,这最好由用户完成 - 最简单的方法是让他们分配整个小时数.

如果这是不可能的,我倾向于让用户提示他们需要选择要碰撞的值 - 有一个参数可能最好将2,1值上升而不是1,4值.这是一个商业决策 - 不是技术决定.