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&);
谢谢
最佳答案
正如几条评论中提到的, float 在平等方面有点奇怪。这是因为,为了使用合理数量的内存, float 不是精确存储的,而是使用越来越小的 2 的幂(即 2^-1 + 2^-2 + 2^-4....)来近似存储的。正如您所料,这意味着存在误差幅度,具体取决于多种因素。
就您的问题而言,归结为:不要在 float 上使用“==”。相反,检查它是否在误差范围内,例如:
float acceptableThresholdOfError = .0001;
if(fabs(levelData.interactMap[tileHitX][tileHitY] - 1.8) <= acceptableThresholdOfError)
{ //code }
显然,所需的精度决定了错误阈值应该/可以有多小。这样,即使您的变量不是完美的近似值,只要它“足够接近”就可以被认为是这样。
关于c++ - 控制台输出某个值 - 如果在它之后直接声明不使用相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925171/