1

当我这样做时:

NSLog(@"%i",1.5 - 1.00 == 0.5);

我得到 1,但是当我这样做时:

NSLog(@"%i",1.33 - 1.00 == 0.33);

我得到0。

有没有办法解决这个问题?

4

1 回答 1

2

问题在于浮点计算的精度:您通常应该避免使用==运算符比较浮点数和双精度数是否相等,而更喜欢检查差异是否小于微小的epsilon(例如1E-9)。

#include <math.h>

...

NSLog(@"%i", abs(((1.33 - 1.00) - 0.33) < 1E-9);

第一个示例有效,因为数字由 2:1 = 2^0和的幂组成0.5 = 2^-1。第二个示例中的数字不能精确地分解为 2 的幂,因此相等性检查不起作用。

于 2012-07-30T20:55:19.803 回答