简化百分比计算c#

Simplify percentage calculation c#

我有这段代码,我相信它是不言自明的(虽然丑陋):

    public decimal Stat
    {
        get
        {
            if (Incorrect == 0)
                return 100;
            decimal x = (decimal)(Correct / Incorrect) / (decimal)(Correct + Incorrect) * 100;
            return x;
        }
    }

有没有办法让这段代码更漂亮?

  1. 您可以只转换除法的一侧,或者只在开始时将其乘以 100.0(这样就不需要小数点大小写了)。
  2. 您不必处理不正确 == 0 的边缘情况,因为如果它成立,则将返回 100 (100.0 * X / (X +0) 等于 100.0)

    public decimal Stat
    {
        get
        {
            return 100m * Correct / (Correct + Incorrect);
        }
    }
    

大概应该是:

public decimal Stat
{
    get
    {
        decimal Total = (decimal)(Correct + Incorrect);
        return (decimal)Correct / Total * 100.0M;
    }
}

您必须使用 decimal,而不是 int 算术。最简单的方法是以小数 100m:

开头的公式
public decimal Stat
{
    get
    {
        return (Correct + Incorrect == 0)
          ? 100m
          : 100m * Correct / (Correct + Incorrect);
    }
}

两点,

  1. 正确百分比为 Correct * 100m / (Correct + Incorrect)。在此之后,您再次除以 Incorrect。我不知道为什么会这样,但它似乎是错误的。

  2. 整数相除的结果是另一个整数。如果 Correct 为 1,Incorrect 为 4,则 Correct / Incorrect 的结果为 0。在除法之前始终转换为浮点类型。

我会像这样重写这段代码,

public int Total => Correct + Incorrect;

// renamed "Stat"
public decimal PercentageCorrect => (Correct * 100m) / Total;

总数似乎是一个有用的数量。让我们把它变成 属性。重命名 "Stat" 很明显它是什么。只是阅读你的代码,我不得不问 "Stat" 是什么,因为你试图做什么并不明显。