为什么我用这个代码得到0.0

本文关键字:代码 为什么 | 更新日期: 2023-09-27 18:11:34

当我在Windows计算器实用程序中输入"15036/18218*100="时,它返回82.53375782193435

我真正想要的是17.47(100 - 82.53),但这不是现在的重点。

使用下面的代码:

// Example: thisQty == 3182; totalQty == 18218
private string GetPercentage(int thisQty, int totalQty)
{
    int diff = totalQty - thisQty; // this equates to 15036
    double prcntg = (diff/totalQty)*100; // this equates to 0.0 for some reason
    return string.Format("{0}%", prcntg);
}

…我得到的是0。为什么?ISTM,这和我在计算器实用程序中手工做的操作是一样的。为什么它不返回82.53375782193435?

为什么我用这个代码得到0.0

即使正确的数学答案是分数,2个int s的除法也会得到一个int

为了让它保留小数部分,你必须除以小数部分(如doubledecimal)的类型的数字:

Console.WriteLine(GetPercentage(3182, 18218));
private string GetPercentage(int thisQty, int totalQty)
{
   int diff = totalQty - thisQty; // this equates to 15036
   double prcntg = (diff / (double)totalQty) * 100;
   return string.Format("{0}%", prcntg);
}

BTW -如果您将difftotalQty强制转换为double并不重要-对于两者它都会执行/操作返回double -这意味着保留分数部分

您正在使用整数值(它不存储阶乘部分),因此将其强制转换为double,或者使用参数类型为double(我的建议)。您的操作15036/18218解析为0.82,并以存储为0的整数值…最后0 * 100无论如何都会解析为0,这就是你得到结果的地方。

试试这个

private string GetPercentage(double thisQty, double totalQty)
{
    double diff = totalQty - thisQty; // this equates to 15036
    double prcntg = (diff/totalQty) * 100.0; // this equates to 0.0 for some reason
    return string.Format("{0}%", prcntg);
}

这也会有小数部分,你会得到结果。

根据Gilad Green的回答,这是我最终得到的,它给出了我最终想要的值,并将值四舍五入为整数:

private string GetPercentage(int thisQty, int totalQty)
{
    int diff = totalQty - thisQty;
    double prcntg = (diff / (double)totalQty) * 100;
    prcntg = 100 - prcntg;
    int roundedPercent = Convert.ToInt32(prcntg);
    return string.Format("{0}%", roundedPercent);
}