我的iPhone有一行代码如下:
double decimal2 = abs(newLocation.coordinate.longitude - degrees);
我正在努力确保decimal2的值始终为正。但是,decimal2目前是-82。
任何人都能解释一下吗?我没有对decimal2的值做任何其他事情。
感谢。
答案 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)
。