绝对值不起作用

时间:2011-03-28 03:07:41

标签: iphone

我的iPhone有一行代码如下:

double decimal2 = abs(newLocation.coordinate.longitude - degrees);

我正在努力确保decimal2的值始终为正。但是,decimal2目前是-82。

任何人都能解释一下吗?我没有对decimal2的值做任何其他事情。

感谢。

3 个答案:

答案 0 :(得分:4)

建议您使用 NSDecimalNumber

您可以使用NSDecimalNumber类的内置函数将数字与零进行比较,然后根据需要乘以-1。例如:

- (NSDecimalNumber *)abs:(NSDecimalNumber *)num {
    if [myNumber compare:[NSDecimalNumber zero]] == NSOrderedAscending) {
        // Number is negative. Multiply by -1
        NSDecimalNumber * negativeOne = [NSDecimalNumber decimalNumberWithMantissa:1
                                                                          exponent:0
                                                                        isNegative:YES];
        return [num decimalNumberByMultiplyingBy:negativeOne];
    } else {
        return num;
    }
}

在这种情况下,没有精度损失

答案 1 :(得分:2)

也许这个“abs”功能不是你想象的那样。你确定你知道它来自哪里吗?也许你或其他人定义了你自己的?没有理由为什么有效的“abs”功能会这样做。

答案 2 :(得分:2)

你正在使用abs()函数,它返回int,但是将结果赋给double。您应该将结果分配给int类型的变量,或者使用返回double的绝对值函数的版本:double fabs(double)

相关问题