Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在列表中添加一个数字,使其成为20%_C#_Itext_Percentage - Fatal编程技术网

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

C# 在列表中添加一个数字,使其成为20%,c#,itext,percentage,C#,Itext,Percentage,我想在一个数字列表中添加一个数字,这样在将这个数字添加到该列表中之后,它将占整个列表的20% 目标是在itextsharp PDF中创建表时,为其他列设置第一列的绝对宽度(20%)和相对宽度 例如,这里有一个列表{10,30,20,20}。我应该在里面加什么,它也是整个列表总和的20%,也就是20(20+10+30+20+20=100,20/100->20%)。一些基本的数学,比如0.20=x/(sum+x)给你x=sum/4。因此,Enumerable.Sum将为您提供大部分结果: listO

我想在一个数字列表中添加一个数字,这样在将这个数字添加到该列表中之后,它将占整个列表的20%

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


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

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

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

我的理解是,你希望第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 + ...)

这是您需要做的:

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


因此,将这个数值设为其他数值总和的25%,您就完成了。

问题的第一部分很奇怪:您谈到一个列表,就好像您希望第一个项目占整个列表的20%。你应该添加一张图纸来帮助我们理解这意味着什么

你问题的第二部分是关于桌子的。那很容易。如果你查阅官方文件,你会找到这个问题的答案

您可以使用
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);

显示失败的代码,这样我们就可以告诉您是如何出错的。问题还不够清楚,如果您添加当前代码,或者列表是什么样子以及操作后会是什么样子就好了。目前还没有代码,我甚至无法创建任何类型的方程式@user3185569@Charlie至少显示一个示例列表和预期结果!我只看到一个与iText相关的答案…但是你在第一次计算中使用了什么COL1?如果你做代数,你会得到:COL1=0.2*COL1+0.2*(col2+col3+…),0.8*COL1=0.2*(col2+col3+…),COL1=0.25*(col2+col3+…),现在这更有用了。前两行正是Charlie发布的内容,单靠它们一点帮助都没有PAnswer是准确和简单的:)请解释多一点。非常感谢
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);
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);