我有来自API服务器的值。服务器将它作为BigDecimal存储在Postgres上。在iOS端,值为__NSCFNumber
类型。如何获得NSCFNumber
的绝对值?
我的主要目的是进一步将此数字转换为货币。
答案 0 :(得分:7)
__NSCFNumber
是一个实现NSNumber
接口的内部类。
如果您想要double
:
NSNumber *myNumber = objectFromPostgres;
double value = fabs(myNumber.doubleValue);
如果您想要long
:
NSNumber *myNumber = objectFromPostgres;
long value = labs(myNumber.longValue);
如果您想要int
:
NSNumber *myNumber = objectFromPostgres;
int value = abs(myNumber.intValue);
答案 1 :(得分:0)
您可以选择精度,但假设为double值,您可以使用:
NSNumber *number = [NSNumber numberWithDouble:-3.14159]; // isa Class __NSCFNumber 0x0000000101357a20
double absoluteValue = fabsl([number doubleValue]);
NSLog(@"absolute value = %f", absoluteValue);
输出:
absolute value = 3.141590
答案 2 :(得分:0)
我问了一个不完整和含糊的问题,我很抱歉。对于我的罪过,我正在发布我的解决方案,也许它可以帮助别人。
NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundUp
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
NSDecimalNumber *totalAmount = [NSDecimalNumber decimalNumberWithDecimal:[user[@"total"] decimalValue]];
totalAmount = [[self abs:totalAmount] decimalNumberByRoundingAccordingToBehavior:roundUp];
我从this SO question获得的辅助方法。
- (NSDecimalNumber *)abs:(NSDecimalNumber *)num {
if ([num 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;
}
}