在c#中使用百分比

时间:2012-02-21 11:54:13

标签: c# math rounding

好的,这就是事情。从DataTable开始,我读了 number_of_project number_of_hours_per_day (大部分时间是每天5到7个小时)。对于每个项目,我使用动态创建的TextBoxes插入 percentage_value (所有 percentage_values 的总和为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 个答案:

答案 0 :(得分:9)

仅将输出信息四舍五入到您的用户界面。

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

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

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