2013-02-19 54 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