在列表中添加一个数字,使其变为20%

时间:2016-09-02 05:52:56

标签: c# itext percentage

我想在数字列表中添加一个数字,以便在该列表中添加此数字后,它是整个列表的20%。

目标是在itextsharp PDF中创建表时,设置第一列的宽度绝对值(20%)和其他列的相对值。

例如,这里是一个列表{10,30,20,20}。我应该添加什么,它也是列表总和的20%,即20(20 + 10 + 30 + 20 + 20 = 100,20 / 100 - > 20%)。

4 个答案:

答案 0 :(得分:7)

一些基本的数学如0.20 = x /(Sum + x)给你x = Sum / 4。因此Enumerable.Sum将为您提供大部分结果:

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

答案 1 :(得分: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 + ...)

答案 2 :(得分: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

所以将这个数字作为其他数字的25%,你就完成了。

答案 3 :(得分: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更改为您想要的任何数字。

<强>更新

与此同时,你澄清了你的问题。

假设您有float[]名为widths1的{​​{1}}包含表格的宽度。请注意,您需要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);