我想在数字列表中添加一个数字,以便在该列表中添加此数字后,它是整个列表的20%。
目标是在itextsharp PDF中创建表时,设置第一列的宽度绝对值(20%)和其他列的相对值。
例如,这里是一个列表{10,30,20,20}。我应该添加什么,它也是列表总和的20%,即20(20 + 10 + 30 + 20 + 20 = 100,20 / 100 - > 20%)。
答案 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);