0

我有这个等式

double x = ((newCount/allCount)/.8)*5.0;

newCount是一个值为 0 allCount的双精度 是一个值为 0 的双精度

结果x-nan(0x8000000000000)

为什么会发生这种情况以及如何检查该objective c值以为其分配默认值

4

3 回答 3

2

你正在以零的速度潜水。您可以使用以下方法检查它:

isnan(x)
于 2012-12-11T09:45:06.340 回答
0

问题是分母 ( allCount) 为 0;不允许除以零,答案不是数字。您可以做的最简单的事情是在进行除法之前对其进行测试:

if (allCount != 0) {
  x = ((newCount/allCount)/.8)*5.0
} else {
  x = defaultValue;
}

使用 C 的浮点环境和测试FE_DIVBYZERO异常有更复杂的方法,但是虽然这是标准的,但它很少使用,因此对于以后的代码读者来说可能更难理解。

于 2012-12-11T09:48:03.737 回答
0

allCount 为 0,因此您只需除以 0(如果您不知道,这是不可能的。)因此,在分配 x 之前,请先确保 allCount 不为 0。

if (allCount != 0)
    double x = ((newCount/allCount)/.8)*5.0;
于 2012-12-11T09:42:35.510 回答