2012-07-30 55 views
1

当我这样做:目标C减法

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

我送1,但是当我这样做:

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

我得到0

有没有什么办法来解决这个?

+3

每个程序员都应该理解浮点数:http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers总之,1.33 - 1.00不是0.33。 – Almo 2012-07-30 20:54:36

+0

这个问题有多少(变化)的问题已经被问到...没有努力使用Google ...呃... – 2012-07-30 20:59:06

+0

@ H2CO3问题是,它很难向谷歌解释你在找什么,除非你知道要求浮点精度或与之相关的东西。 – dasblinkenlight 2012-07-30 21:07:26

回答

2

问题是与浮点计算的精度:你一般应该避免使用==操作比较平等浮点数和双精度数,宁愿检查的差异比一个小小量较小(如1E-9)。

#include <math.h> 

... 

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

第一个示例,因为数由2的幂:1 = 2^00.5 = 2^-1。第二个例子中的数字不能完全分解为2的幂,所以相等性检查不起作用。

+0

谢谢,解决了它。 – aeubanks 2012-07-30 21:00:21