将NSNumber转换为NSDecimalNumber

43

我了解NSDecimalNumber继承自NSNumber。

但是,我很难弄清楚如何从NSNumber初始化NSDecimalNumber,或者如何将NSNumber转换为NSDecimalNumber。

我尝试过

NSDecimalNumber* d = [aNumber copy];

请问我是否遗漏了什么?其中aNumber是一个NSNumber对象,但没有成功。

谢谢。


顺便提一下,[NSNumber copy] 永远不会返回 NSDecimalNumber… 我只知道可以通过 NSDecimal(如下面的答案)或通过 NSString 进行转换。 - jbg
2个回答

85

您可以做到:

NSDecimalNumber *decNum = [NSDecimalNumber decimalNumberWithDecimal:[aNumber decimalValue]];

唯一的问题是传递一个值为2e+34的NSNumber最终会得到decNum为2和34个零。希望它能保持相同的尾数和指数。 - Michael Rivers
1
"2e+34" 是 2 后面跟着 34 个零。这两种方式表示的是同一个数字。 - rmaddy

21

So:

NSNumber * number = [NSNumber numberWithInt:10];
NSDecimalNumber *d = [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]];

在 Swift 中

let number = NSNumber(int: 10)
let dec = NSDecimalNumber(decimal: number.decimalValue)

第二个无效(在两种情况下,d 都需要是指针)。 - rmaddy
@rmaddy 你在说什么? - pronebird
@Andy 我的原始评论后,答案已经被编辑了两次(截至本评论)。请查看编辑历史,以了解我评论时答案的样子。 - rmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接