为什么我用这个代码得到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?
即使正确的数学答案是分数,2个int
s的除法也会得到一个int
。
为了让它保留小数部分,你必须除以小数部分(如double
或decimal
)的类型的数字:
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 -如果您将diff
或totalQty
强制转换为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);
}