我有这个等式
double x = ((newCount/allCount)/.8)*5.0;
newCount
是一个值为 0
allCount
的双精度 是一个值为 0 的双精度
结果x
是-nan(0x8000000000000)
为什么会发生这种情况以及如何检查该objective c
值以为其分配默认值
我有这个等式
double x = ((newCount/allCount)/.8)*5.0;
newCount
是一个值为 0
allCount
的双精度 是一个值为 0 的双精度
结果x
是-nan(0x8000000000000)
为什么会发生这种情况以及如何检查该objective c
值以为其分配默认值
你正在以零的速度潜水。您可以使用以下方法检查它:
isnan(x)
问题是分母 ( allCount
) 为 0;不允许除以零,答案不是数字。您可以做的最简单的事情是在进行除法之前对其进行测试:
if (allCount != 0) {
x = ((newCount/allCount)/.8)*5.0
} else {
x = defaultValue;
}
使用 C 的浮点环境和测试FE_DIVBYZERO
异常有更复杂的方法,但是虽然这是标准的,但它很少使用,因此对于以后的代码读者来说可能更难理解。
allCount 为 0,因此您只需除以 0(如果您不知道,这是不可能的。)因此,在分配 x 之前,请先确保 allCount 不为 0。
if (allCount != 0)
double x = ((newCount/allCount)/.8)*5.0;