在我的应用程序中,我使用了一个使用 json 进行通信的外部 API。今天我遇到了浮点数和 NSNumbers 之间的奇怪行为(由于我对 iOS 的缺乏经验,这可能很奇怪)。问题是我在 API 响应中收到一个浮点数,在这种特殊情况下它是 135.99。当本机 obj-c json 解析器解析响应时,它会使用该值创建 NSNumber。它工作完美。但是当我开始使用这个 API 时,我不知道原生 json 解析器是如何表现出来的,所以我一直在做这样的事情:
NSNumber * number = [NSNumber numberWithFloat:[[response objectForKey:@"Number"] floatValue]];
所以,上面发生的实际上是将 NSNumber 转换为浮点数并使用该浮点数创建新的 NSNumber。它有什么奇怪的?奇怪(对我来说)是上面的行生成 NSNumber 的值...... 135.99001 而不是 135.99 这是正确的。
我知道浮点算术真的很糟糕,特别是在像 PHP 这样的语言中(0.2 + 0.7 不等于 0.9),但我没想到在像 Objective-c 这样的语言中,它是 C 语言的超集,我会发现这样乱来。有人对这个问题有很好的解释吗?