简化百分比计算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;
}
}
有没有办法让这段代码更漂亮?
- 您可以只转换除法的一侧,或者只在开始时将其乘以 100.0(这样就不需要小数点大小写了)。
您不必处理不正确 == 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);
}
}
两点,
正确百分比为 Correct * 100m / (Correct + Incorrect)
。在此之后,您再次除以 Incorrect。我不知道为什么会这样,但它似乎是错误的。
整数相除的结果是另一个整数。如果 Correct 为 1,Incorrect 为 4,则 Correct / Incorrect
的结果为 0。在除法之前始终转换为浮点类型。
我会像这样重写这段代码,
public int Total => Correct + Incorrect;
// renamed "Stat"
public decimal PercentageCorrect => (Correct * 100m) / Total;
总数似乎是一个有用的数量。让我们把它变成 属性。重命名 "Stat" 很明显它是什么。只是阅读你的代码,我不得不问 "Stat" 是什么,因为你试图做什么并不明显。
我有这段代码,我相信它是不言自明的(虽然丑陋):
public decimal Stat
{
get
{
if (Incorrect == 0)
return 100;
decimal x = (decimal)(Correct / Incorrect) / (decimal)(Correct + Incorrect) * 100;
return x;
}
}
有没有办法让这段代码更漂亮?
- 您可以只转换除法的一侧,或者只在开始时将其乘以 100.0(这样就不需要小数点大小写了)。
您不必处理不正确 == 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);
}
}
两点,
正确百分比为
Correct * 100m / (Correct + Incorrect)
。在此之后,您再次除以 Incorrect。我不知道为什么会这样,但它似乎是错误的。整数相除的结果是另一个整数。如果 Correct 为 1,Incorrect 为 4,则
Correct / Incorrect
的结果为 0。在除法之前始终转换为浮点类型。
我会像这样重写这段代码,
public int Total => Correct + Incorrect;
// renamed "Stat"
public decimal PercentageCorrect => (Correct * 100m) / Total;
总数似乎是一个有用的数量。让我们把它变成 属性。重命名 "Stat" 很明显它是什么。只是阅读你的代码,我不得不问 "Stat" 是什么,因为你试图做什么并不明显。