如何将 NSDecimalNumber 转换为 NSNumber?我在一个方法中创建了一个 NSDecimalNumber ,该方法必须返回一个 NSNumber 对象,稍后可以使用 [ ... isKindOfClass:[NSNumber class]] 进行检查
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
id rn = [self haveToBeNSNumber];
if ([rn isKindOfClass:[NSNumber class]]) {
NSLog(@"It's NSNumber class object");
}
return YES;
}
- (NSNumber *)haveToBeNSNumber {
NSDecimalNumber *dNumber = [NSDecimalNumber decimalNumberWithString:@"123.22"];
return dNumber;
}
你的东西有什么问题吗?
正如@dan所说,
NSDecimalNumber
是一个NSNumber
,即NSDecimalNumber
响应NSNumber
的所有方法。
如果需要,您可以转换返回类型:
return (NSNumber *)dNumber;
重新舍入和准确性:
NSDecimalNumber
以精确的十进制表示形式,NSNumber
是值的接近二进制表示形式,大多数非整数的十进制数无法以二进制(基数为2)完全准确地表示.
您可以使用
NSNumberFormatter
控制显示格式。 NSLog 使用 description
方法来显示并格式化 Apple 开发者喜欢的数字。
由于
NSDecimalNumber
实际上是 NSNumber
的子类,因此您可以轻松地向上转换它,例如:
let decimalNumber = NSDecimalNumber(integerLiteral: 12)
let number = decimalNumber as NSNumber // 👈 Upcast like this