gpt4 book ai didi

swift - 在 Swift 中比较小数(不是 float )

转载 作者:行者123 更新时间:2023-11-30 12:06:09 25 4
gpt4 key购买 nike

我有一个包含以下行的测试用例:

XCTAssert(testVal == value)

valuetestVal 都是小数。在大多数情况下,等效性测试会给出预期的结果,但并非总是如此。例如

let value = Decimal(0xFFFF)
... do stuff that generates testVal
XCTAssert(testVal == value) // evaluates false

但是,当我查看 value 和 testVal 时,它们似乎是相同的。

(lldb) print testVal == value
(Bool) $R0 = false // the condition causing the test to fail
(lldb) print value.description
(String) $R1 = "65535" // what you would expect, given the init
(lldb) print testVal.description
(String) $R2 = "65535" // the same as value. Hmmm...

(lldb) print (testVal - value).isZero
(Bool) $R3 = true // the difference is zero, but they are not equal?

我检查了两个 Decimal 的所有属性,甚至哈希值都相同,但它们的计算结果不相等。我看到的唯一区别是一个是紧凑的,另一个不是。我没有找到强制压缩的方法,所以我不知道这是否是一个因素。

当使用其他值(例如 0xFF、65535.1 和许多其他值)进行初始化时,测试比较成功。

虽然这种行为是 float 的典型行为,但它不应该发生在小数中,不是吗?

最佳答案

好的,在发布此内容后不久就找到了答案:这确实与压缩小数有关。来自文档:

All the NSDecimal... arithmetic functions expect compact NSDecimal arguments.

一旦我添加了该行

NSDecimalCompact(&testVal)

比较结果符合预期。

关于swift - 在 Swift 中比较小数(不是 float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com