0
cout << levelData.interactMap[tileHitX][tileHitY] << endl;
if(levelData.interactMap[tileHitX][tileHitY] == 1.8)
        cout << "pls werk" << endl;

所以 cout 输出 1.8 ......但是 if 语句不起作用。

这是一个函数,我在其中传递一个结构成员以使用 & 指针。

它在这个 if 语句中。

if(levelData.interactMap[tileHitX][tileHitY] >= 1 & levelData.interactMap[tileHitX][tileHitY] <= 1.8)
{
    levelData.interactMap[tileHitX][tileHitY] = levelData.interactMap[tileHitX][tileHitY] + 0.1;
    chop.play();

    cout << levelData.interactMap[tileHitX][tileHitY] << endl;
    if(levelData.interactMap[tileHitX][tileHitY] == 1.8)
        cout << "pls werk" << endl;
}

调用函数

int action(int facing, sf::Sprite& player, sf::View& view, sf::Clock& actionTimer, levelData& levelData, sf::Sound& chop)

以及函数的定义

int action(int, sf::Sprite&, sf::View&, sf::Clock&, levelData&, sf::Sound&);

谢谢

4

1 回答 1

1

正如几条评论中提到的,浮点数在平等方面有点奇怪。这是因为,为了使用合理的内存量,浮点数并没有精确存储,而是使用越来越小的 2 次方来近似(即 2^-1 + 2^-2 + 2^-4....)。正如您所料,这意味着存在一定的误差范围,具体取决于几个因素。

就您的问题而言,归结为:不要在浮点数上使用“==”。相反,请检查它是否在误差范围内,例如:

float acceptableThresholdOfError = .0001;
if(fabs(levelData.interactMap[tileHitX][tileHitY] - 1.8) <= acceptableThresholdOfError)
{ //code }

显然,所需的精度准确地确定了误差阈值应该/可以有多小。这样,即使你的变量不是一个完美的近似值,只要它“足够接近”就可以被认为是这样的。

于 2013-09-20T21:08:17.837 回答