我有两个变量,一个速度和一个最小值。将速度与最小值进行比较,以查看速度是否应继续降低。由于某些原因,即使速度等于最小值,也会继续降低速度。
var wallSpeed : CGFloat!
var wallSpeedMin : CGFloat!
var wallSpeedChange : CGFloat!
override init(){
wallSpeed = 0.0035
wallSpeedMin = 0.0034
wallSpeedChange = 0.0001
}
最低速度接近测试速度。
if wallSpeed > wallSpeedMin
{
print("Wall speed has been increased")
wallSpeed = wallSpeed - wallSpeedChange
print("New speed is \(wallSpeed!)")
}else
{
print("Player moved up screen")
//Move player up instead
playerNode.position.y = playerNode.position.y + 5
print("Players Y value is \(playerNode.position.y)")
}
即使壁速度等于第一次降低后的最小壁速度,它也不会命中else语句。
我的if语句设置不正确吗?是什么导致这种行为?
答案 0 :(得分:1)
浮点数学无法正常工作。选中Is floating point math broken?
答案 1 :(得分:0)
您不能像这样比较浮点数...
由于浮点数表示的方式,我们不能简单地对它们进行一些数学运算。...
当我们使用整数时,它们直接以二进制格式表示,并且您可以对它们进行任何算术计算,而浮点数是遵循IEEE 754标准的32位容器,分为三部分:
符号的1位S
8位为指数
23个尾数
有关更多信息,Comparing Floating Point Numbers和Floating Point in Swift