【问题标题】:Add a number in list so it becomes 20 percent在列表中添加一个数字,使其变为 20%
【发布时间】:2016-09-02 05:52:55
【问题描述】:

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

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

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

【问题讨论】:

  • 显示失败的代码,以便我们告诉你你做错了什么。
  • 问题不够清楚,如果加上当前代码就好了
  • 还没有代码,我什至无法创建任何类型的方程式@user3185569
  • @Charlie 至少显示一个示例列表和预期结果!
  • 我只看到一个与 iText 相关的答案...

标签: c# itext percentage


【解决方案1】:

像 0.20 = x / (Sum + x) 这样的基本数学计算得出 x = Sum/4。所以Enumerable.Sum 会给你大部分结果:

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

【讨论】:

  • 答案准确而简单:) 请多解释一点。非常感谢你
【解决方案2】:

这是你需要做的:

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】:

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

    【讨论】:

    • 但是您在第一次计算中使用什么 COL1?
    • 如果你做代数,你会得到: col1 = 0.2 * col1 + 0.2 * (col2 + col3 +...), 0.8 * col1 = 0.2 * (col2 + col3 + ...) , col1 = 0.25 * (col2 + col3 + ...)
    • 现在这样更有用了。前 2 行正是查理发布的内容,仅凭它们根本没有帮助。 :P
    【解决方案4】:

    您问题的第一部分很奇怪:您谈到一个列表,就好像您希望第一个项目占整个列表的 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 更改为您想要的任何数字。

    更新:

    与此同时,您已经澄清了您的问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 2017-11-23
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2015-06-10
      相关资源
      最近更新 更多