2013-02-19 5 views
-1

Je dois être capable d'éditer des valeurs de poids qui sont des types d'entiers par des pourcentages.Poids et pourcentages

Par exemple: j'ai obtenu les poids suivants:

 
Var Weight 
x  100 
y  50 
z  50 

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

Maintenant, si je veux être en mesure de modifier un poids existant ou d'ajouter un nouveau poids en entrée de pourcentage, comment puis-je faire en sorte que les poids seront toujours des types entiers et que je n'aurai pas besoin d'arrondi. Par exemple, si je veux ajouter un nouveau poids qui sera de 25% du poids total, comment puis-je le calculer? Notez que je peux changer les autres poids (incrément/décrément) afin d'y parvenir.

Mais la condition nécessaire ici est que les poids resteront entiers et que le pourcentage des poids nouveaux/modifiés sera tel que demandé.

Si je ne devais pas faire en sorte que les poids seront entiers alors il était facile, je peux utiliser l'équation suivante:

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

mais ce n'est pas le cas ...

+1

Vous pouvez afficher les valeurs sous forme tronquée mais maintenir les valeurs dans le code comme flottants, il suffit de convertir la valeur en int lorsque vous affichez la valeur, C#: 'var xValue = (int) x;' –

+0

Oui mais avec cette approche finira par perdre de la précision ... –

+1

"Remarquez que je peux changer les autres poids pour y arriver". Y a-t-il une contrainte particulière sur la façon dont vous pouvez changer les poids? Sinon, le problème est facile. Si vous essayez d'ajouter un poids de X% à la liste, décrémentez tous les poids mais le premier à 0, et augmentez/décrémentez le premier poids à (100-X). Prenant votre premier exemple, le résultat est x = 75, y = 0, z = 0, new_value = 25. – Kevin

Répondre

2

Supposons que vous vouliez ajouter un poids de% à la liste. Dans le cas de votre premier exemple, w = 25.

D'abord, trouvez la somme totale des poids actuels.

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

Multipliez chaque poids actuel par (100-w).

x 7500 
y 3750 
z 3750 

Multipliez w par le total que vous avez précédemment trouvé et ajoutez-le à la liste.

x 7500 
y 3750 
z 3750 
w 5000 

Vous pouvez réduire le nombre à leur forme la plus petite en divisant chacun par le GCD de tous les poids.

x 6 
y 3 
z 3 
w 4 

Attention aux erreurs de débordement lors de l'utilisation de cette méthode. Il peut être préférable d'utiliser une sorte de type de données bignum.

+0

Merci! C'est la réponse que je cherchais - je viens de comprendre cela et ensuite je vous ai vu répondre ici. Merci encore!!! –