百分比计算返回零

时间:2018-11-27 06:52:05

标签: c++ math floating-point int double

double calculatePercentage(int unmatched, int charLen){
    double percentageReturn = (((charLen - unmatched)/charLen) * 100);
    cout << "percenpercentageReturntage " << percentageReturn << endl;
    return percentageReturn;
}

我试图计算这些值的百分比,但是它返回0。我尝试使用intfloatdouble,但全部返回0

有人可以帮我吗?

4 个答案:

答案 0 :(得分:2)

您可以在进行除法和乘法运算时强制转换double,以便整体结果将出现在double中。您可以执行以下操作:

double percentageReturn = ( ( (double)(charLen - unmatched) / (double)charLen ) * 100.0 );

答案 1 :(得分:1)

在下面的语句中,首先评估分配的右侧,然后将其分配给subclass viewController(B),此时将进行隐式转换(如果需要)。

percentageReturn

在右侧,所有参数都是整数,因此将是整数除法,然后是结果的截断。

由于double percentageReturn = (((charLen - unmatched)/charLen) * 100); 小于(charLen - unmatched),因此被截断的结果将为0。

要解决此问题,可以将除法的分子或分母强制转换为charLen,这将使您除法而不会被截断。

double(double)(charLen - unmatched)

答案 2 :(得分:0)

在C ++中,除法运算符/的两侧均为整数类型时,将执行整数除法。为了克服这个问题,您需要首先将参数强制转换为浮点类型,如下所示:

double cl = static_cast<double>(charLen);
double um = static_cast<double>(unmatched);

请注意,如果您使用的是Modern C ++,则最好使用static_cast而不是旧的C样式强制转换来隐式转换类型。

答案 3 :(得分:0)

要解决您的问题,请尝试以下两种可能的解决方案之一

ws::listen