Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我用这个代码得到0.0?_C#_Math_Percentage - Fatal编程技术网

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

C# 为什么我用这个代码得到0.0?,c#,math,percentage,C#,Math,Percentage,在Windows计算器实用程序中输入15036/18218*100=返回82.53375782193435 我真正想要的是17.47100-82.53,但目前这还不是重点 使用此代码: // Example: thisQty == 3182; totalQty == 18218 private string GetPercentage(int thisQty, int totalQty) { int diff = totalQty - thisQty; // this equates t

在Windows计算器实用程序中输入15036/18218*100=返回82.53375782193435

我真正想要的是17.47100-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);
}

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

您使用的是一个不存储派系部分的整数值,因此将其强制转换为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);
}
这将有分数部分,你会得到结果

即使正确的数学答案是分数,2整数的除法也将是整数

为了使其保留小数部分,您必须使用一个类型的数字进行除法,该数字保留小数部分,如double或decimal:


顺便说一句-如果你将diff或totalQty转换为两倍并不重要-对于两者,它将执行/操作返回一个double-这意味着根据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);
}

您必须将差异转换为双精度,双精度=双精度/总数量*100;当你得到一个添加了一些东西的答案时,把它作为一个自我答案发布。不要在问题中编辑“解决方案”。这与我的原始代码有何不同?Diff需要是一个double。它仍然是INT.@B.ClayShannon,传入的参数ThisQuaty和TotalQuaty现在是双倍的,而不是INT。但是,diff变量也必须是double类型。@GiladGreen实际上它可以工作,因为TotalQuantity现在是double,如果使用int和double进行操作,它会将int转换为double并执行double操作。虽然在第一行将差异转换成整数没有意义,但很抱歉,我错过了签名中双精度的变化
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);
}