2012-02-21 54 views
2

好吧,這是事情。從DataTable我讀number_of_projectnumber_of_hours_per_day(大部分時間每天5至7小時)。對於每個項目我插入percentage_value與動態創建TextBoxes(總結所有百分比值是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更改爲100.0:double hours_for_project_per_day = percentage_value * number_of_hours_per_day/100; – 2012-02-21 11:58:18

+1

好吧,沒有得到這個事實,即分數的總和和它們的舍入值的總和是不同的。這只是數學:)我會建議將他們四捨五入到2,3或任何小數位(不會解決您的問題,但會減少它),或與您的第二個想法,這對我來說似乎可以。 – 2012-02-21 11:58:38

+0

您是否正在使用可以查詢的數據庫? – Peter 2012-02-21 11:58:53

回答

9

只將信息舍入輸出到用戶界面。

您應該使用非舍入數字執行所有計算。

編輯 針對的事實,你必須圓角值存儲在基於百分比作風投入的分貝我會說這就是在要求的缺陷。在某天結束時,必須決定在哪裏分配額外的時間,這最好由用戶完成 - 最簡單的方法是讓他們分配整個小時數。

如果這是不可能的,我會傾向於讓用戶提示他們需要選擇哪個值碰撞 - 有一個論點,也許它會更好地撞上2,1值而不是1 ,4值。這是一個商業決定,但不是技術性的。

+0

這確實是一個很好的建議。 +1 – ken2k 2012-02-21 12:20:29

+0

問題是我必須向數據庫插入四捨五入的值。 – JanOlMajti 2012-02-21 13:07:33

+0

你是對的,我碰到了2.1,這更合乎邏輯。好的建議,謝謝。 – JanOlMajti 2012-02-21 13:40:24