2016-02-11 265 views
1

如何將NSDecimalNumber轉換爲NSNumber?我有一個NSDecimalNumber具有返回,可後來用查了的NSNumber對象的方法內部創建[... isKindOfClass:[NSNumber的類]如何將NSDecimalNumber轉換爲NSNumber

- (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; 

} 
+2

'NSDecimalNumber'已經是'NSNumber'的子類,並且在用'[x isKindOfClass:[NSNumber class]]'檢查時將返回YES。你的問題是什麼? – dan

+0

我不知道使用「isKindOfClass:」方法檢查對象類不區分類和子類。 – Adobels

+1

'isKindOfClass:'如果對象是您正在檢查的類的子類,則爲true,在這種情況下'isMemberOfClass:'將返回false – dan

回答

3

有什麼不對的,你有什麼?

由於@dan狀態NSDecimalNumberNSNumber,即NSDecimalNumber響應NSNumber的所有方法。

return (NSNumber *)dNumber; 

再取整和準確性:

,如果你需要,就可以把返回類型的值的精確十進制表示NSDecimalNumberNSNumber是價值的親密二進制表示,大多數十進制數不是整數,不能用二進制完全準確地表示(基數2)。

您可以使用NSNumberFormatter控制顯示的格式。 NSLog使用description方法進行顯示並格式化Apple開發人員喜歡的編號。