2013-02-19 1526 views
-1

我需要能夠按百分比編輯整數類型的權重值。權重和百分比

例如: 我得到了以下的權重:

 
Var Weight 
x  100 
y  50 
z  50 

So z is 25% ,y is 25% and x is 50% 

現在,如果我希望能夠編輯現有的重量或百分比輸入要添加新的重量,我怎麼能確保權重仍然是整數類型,我不會有任何需要的舍入。

例如,如果我想添加一個新的重量,這個重量將佔總重量的25%,我該如何計算? 請注意,我可以更改其他權重(增量/減量)以實現此目的。

但是這裏需要進行的必要條件是權重將保持整數,並且新/編輯權重的百分比將按照要求。

如果我沒得確保該權重將是整數那麼它很容易,我就可以用下面的公式:

NewWeight =(總* RequestedPerecentage)/(1-RequestedPerecentage)

但事實並非如此......

+1

您可以顯示截斷形式的值,但將代碼中的值保存爲浮點數,只需將值顯示爲int時顯示值,如下所示:在c#中:var xValue =(int)x;' – 2013-02-19 14:40:12

+0

是,但是這種方法最終我會失去精度...... – 2013-02-19 14:45:00

+1

「通知我可以改變其他權重,以實現這一目標」。對於如何改變權重有沒有特別的限制?否則,問題很簡單。如果您嘗試將X%的權重添加到列表中,則將所有權重(除第一個權重之外)減爲0,並將第一權重遞增/遞減至(100-X)。以您的第一個示例爲例,結果爲x = 75,y = 0,z = 0,new_value = 25。 – Kevin 2013-02-19 14:49:02

回答

2

假設您想將w%的權重添加到列表中。在你的第一個例子中,w = 25。

首先,找到當前權重的總和。

x 100 
y 50 
z 50 
---- 
Total 200 

將每個當前權重乘以(100-w)。

x 7500 
y 3750 
z 3750 

乘W將總你以前發現的,並將其添加到列表中。

x 7500 
y 3750 
z 3750 
w 5000 

您可以通過將每一個由所有的權重GCD減少數字來他們最小的形式。

x 6 
y 3 
z 3 
w 4 

使用此方法時請留意溢出錯誤。最好使用某種類型的bignum數據類型。

+0

謝謝!這就是我正在尋找的答案 - 我只是想到了這一點,然後看到你在這裏回答。再次感謝!!! – 2013-02-19 16:28:24