C# 为什么我用这个代码得到0.0?
在Windows计算器实用程序中输入15036/18218*100=返回82.53375782193435 我真正想要的是17.47100-82.53,但目前这还不是重点 使用此代码: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
// 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);
}