很难与漂浮物一起工作

时间:2010-12-31 02:15:09

标签: objective-c

我不确定该怎么命名。

我正在检查两个浮点数的值是否相同。如果我使用printf()NSLog(),则值会返回0.750000。但是,像if (value1 == value2) { return TRUE; }这样的行不起作用。我可以假设实际上浮点数超出了7位小数,printf() / NSLog()不能返回超过7位小数的​​值。

我尝试使用谷歌搜索方式来查看如何将浮点数减少到较小的小数位数,或者只是将其转换为其他数据类型,但到目前为止我没有得到这样的运气。

3 个答案:

答案 0 :(得分:4)

您可能想要查看float.h(http://www.gnu.org/software/libc/manual/html_node/Floating-Point-Parameters.html)以获取epsilon的非任意定义。特别是FLT_EPSILONFLT_DIG

答案 1 :(得分:1)

您可以决定epsilon是数字等于的最大值。像

  #define EPSILON 0.0001

  if (fabs(floatA - floatB) < EPSILON) { retun TRUE; }

fabs(x)会返回double x 的绝对值。

您可能还想使用double代替float数据类型(doublefloat的两倍)。

答案 2 :(得分:0)

比较浮点数时,需要使用公差:

if (Abs(value1 - value2) < epsilon)
{
}

其中epsilon是一个值,例如0.000001