如何将 NSDecimalNumber 转换为 NSNumber

问题描述 投票:0回答:2

如何将 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;
}
swift objective-c nsdecimalnumber
2个回答
10
投票

你的东西有什么问题吗?

正如@dan所说,

NSDecimalNumber
是一个
NSNumber
,即
NSDecimalNumber
响应
NSNumber
的所有方法。

如果需要,您可以转换返回类型:

return (NSNumber *)dNumber;

重新舍入和准确性:

NSDecimalNumber
以精确的十进制表示形式,
NSNumber
是值的接近二进制表示形式,大多数非整数的十进制数无法以二进制(基数为2)完全准确地表示.

您可以使用

NSNumberFormatter
控制显示格式。 NSLog 使用
description
方法来显示并格式化 Apple 开发者喜欢的数字。


0
投票

斯威夫特

由于

NSDecimalNumber
实际上是
NSNumber
的子类,因此您可以轻松地向上转换它,例如:

let decimalNumber = NSDecimalNumber(integerLiteral: 12)

let number = decimalNumber as NSNumber // 👈 Upcast like this
© www.soinside.com 2019 - 2024. All rights reserved.