如何将负零与正零分开?

How do I seperate negative zero from positive zero?

我希望能够测试 swift 中的零是正数还是负数。

let neg: CGFloat = -0
let pos: CGFloat = +0

if pos == neg {
    // this gets executed, but I don't want this
}

上面的代码不能像我需要的那样工作,有人可以帮助我吗?

谢谢 ;)

有“负零”和“正零”浮点数。 您可以通过检查 .sign 属性 来消除它们的歧义,但是它们 (故意)比较相等:

let neg: CGFloat = -0.0
let pos: CGFloat = +0.0

print(neg.sign) // minus
print(pos.sign) // plus
print(neg == pos) // true

if (neg == pos && neg.sign == pos.sign) {
    // This is not executed.
}

请注意,您必须使用浮点文字(“-0.0”或“+0.0”) 在初始化中。整数文字(“+0”,“-0”)相等 并转换为正零。

基本上,从普通算术的角度来看,negpos都是同零,因此if pos == neg为真

然而,在表示浮点数时,CGFloatsign 属性 作为 FloatingPointSign enum:

minus if the sign bit of self is set, and plus otherwise. Implements the IEEE 754 sign bit operation.

因此,您的 if 语句将是:

if neg.sign == pos.sign { } // false