我有这个代码,我认为这是不言自明的(虽然丑陋):
public decimal Stat
{
get
{
if (Incorrect == 0)
return 100;
decimal x = (decimal)(Correct / Incorrect) / (decimal)(Correct + Incorrect) * 100;
return x;
}
}
有没有办法让这段代码更漂亮?
答案 0 :(得分:4)
您必须使用decimal
,而不是int
算术。最简单的方法是使用小数100m
启动公式:
public decimal Stat
{
get
{
return (Correct + Incorrect == 0)
? 100m
: 100m * Correct / (Correct + Incorrect);
}
}
答案 1 :(得分:2)
您不必处理错误== 0的边缘情况,因为如果它成立,则返回100( 100.0 * X /(X + 0)等于100.0)强>
public decimal Stat
{
get
{
return 100m * Correct / (Correct + Incorrect);
}
}
答案 2 :(得分:1)
两点,
正确的百分比为Correct * 100m / (Correct + Incorrect)
。在此之后,您再次按不正确除以。我不知道为什么会这样,但似乎不对。
整数除法的结果是另一个整数。如果Correct为1且Incorrect为4,那么Correct / Incorrect
的结果为0.在进行除法之前,请始终转换为浮点类型。
我会像这样重写这段代码,
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;
}
}