2016-09-02 6 views
2

Я хочу добавить число в список чисел, чтобы после добавления этого числа в этот список это 20 процентов от всего списка.Добавьте число в список, чтобы он стал 20%

Цель состоит в том, чтобы установить ширину первого столбца абсолютного (20%) и относительного для других столбцов при создании таблицы в itextsharp PDF.

Например, вот список {10,30,20,20}. Что я должен добавить в него, что составляет 20% от общей суммы списка, что составляет 20 (20 + 10 + 30 + 20 + 20 = 100, 20/100 -> 20%).

+0

Показать код неудовлетворительную, так что мы можем сказать вам, как вы делаете это неправильно. – user3185569

+0

Вопрос не совсем ясен. Было бы здорово, если бы вы добавили текущий код или как выглядит список и как он будет после операций –

+0

еще нет кода, я не могу даже создать какое-либо уравнение @ user3185569 – Charlie

ответ

7

Некоторая базовая математика, такая как 0.20 = x/(Sum + x), дает вам x = Sum/4. Так Enumerable.Sum даст вам большую часть результата:

listOfInt.Add (listOfInt.Sum()/4); 
+0

Ответ точный и простой :) Пожалуйста, объясните немного больше. Thankyou so much – Charlie

0

Так что я понимаю, вы хотите ширину столбца 1 будет 20% ширины всех столбцов. Вам нужно будет сложить все столбцы:

TOTAL_WIDTH = COL1 + COL2 + COL3 + ... 
COL1 = 0.2 * TOTAL_WIDTH 

COL1 = 0.2 (COL1 + COL2 + COL3 + ...) 
COL1 - 0.2 * COL1 = 0.2 * (COL2 + COL3 + ...) 
0.8 * COL1 = 0.2 * (COL2 + COL3 + ...) 
COL1 = 0.25 * (COL2 + COL3 + ...) 
+0

Но какой COL1 вы используете в своем первом расчете? – Andrew

+0

Если вы сделаете алгебру, вы получите: col1 = 0,2 * col1 + 0,2 * (col2 + col3 + ...), 0,8 * col1 = 0,2 * (col2 + col3 + ...), col1 = 0,25 * (col2 + col3 + ...) – Kelvin

+0

Теперь это более полезно. Первые 2 строки - это то, что написал Чарли, и они одни не помогли. :П – Andrew

0

Это то, что вам нужно сделать:

N4 = TOTAL * 0.2 
N1 + N2 + N3 + TOTAL * 0.2 = TOTAL 
N1 + N2 + N3 = TOTAL * 0.8 
(N1 + N2 + N3)/0.8 = TOTAL 

Итак ...

N4 = ((N1 + N2 + N3)/0.8) * 0.2 
N4 = (N1 + N2 + N3)/4 

Так сделайте это Num 25% от суммы других, и вы закончили.

0

Первая часть вашего вопроса странная: вы говорите о списке, и вы хотите, чтобы первый элемент взял 20% от полного списка. Вы должны добавить рисунок, чтобы помочь нам понять, что это будет означать.

Вторая часть вашего вопроса говорит о таблице. Это легко. Если вы посмотрите в официальной документации, вы найдете ответ на вопрос How to change width of single column of table?

Вы можете установить относительную ширину, используя метод setWidths(). В вашем случае, вы бы:

int columns = 8; 
float[] widths = new float[columns]; 
float[0] = 20f; 
for (int i = 1; i < columns; i++) 
    float[i] = 80/(columns - 1); 
PdfPTable table = new PdfPTable(columns); 
table.setWidths(widths); 

Изменение 8 в любой номер, который вы хотите, если вам нужно больше или меньше, чем 8 столбцов.

Update:

В то же время, вы выяснили, ваш вопрос.

Предположим, что у вас есть float[] с именем widths1, который содержит ширину таблицы. Обратите внимание, что вам понадобится float вместо int, потому что мы собираемся сделать дивизии.

В этом случае, вы можете сделать это:

int n = widths1.length; 
float total = 0; 
for (int i = 0; i < n; i++) 
    total += widths1[i]; 
n++; 
float[] widths2 = new float[n]; 
widths2[0] = total/4; 
for (int i = 1; i < n; i++) 
    widths2[i] = widths1[i - 1]; 
PdfPTable table = new PdfPTable(n); 
table.setWidths(widths2);