简化百分比计算c#

时间:2017-05-14 20:43:11

标签: c# decimal percentage

我有这个代码,我认为这是不言自明的(虽然丑陋):

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

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

  1. 您只能在分区的一侧投射,或者只是在开始时将其乘以100.0(然后不需要套管到十进制)。
  2. 您不必处理错误== 0的边缘情况,因为如果它成立,则返回100( 100.0 * X /(X + 0)等于100.0)

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

答案 2 :(得分:1)

两点,

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

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

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

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

    Total似乎是一个有用的数量。让我们把它变成一个属性。重命名“Stat”使其显而易见。只是阅读你的代码,我不得不问“Stat”是什么,因为你想要做的事情并不明显。

答案 3 :(得分:0)

应该是:

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