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

Вы можете отображать значения в укороченной форме, но сохранять значения в коде как float, просто присваивать значение int при отображении такого значения в C#: 'var xValue = (int) x;' –

+0

Да, но с этот подход в конечном итоге я потеряю точность ... –

+1

«Обратите внимание, что я могу изменить другие веса для достижения этого». Есть ли какие-либо особые ограничения на то, как вы можете изменить вес? Если нет, проблема проста. Если вы пытаетесь добавить вес X% в список, уменьшите все веса, но первый на 0, а также увеличите/уменьшите первый вес до (100-X). Взяв ваш первый пример, результат: x = 75, y = 0, z = 0, new_value = 25. – Kevin

ответ

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

Спасибо! это ответ, который я искал - я просто это понял, а потом увидел, что вы ответили здесь. Еще раз спасибо!!! –

Смежные вопросы