3

好的,所以我试图将这个分数提高到一个高功率。但由于某种原因,根据日志,我得到的数字非常高,有时甚至是 NSDecimalOverflor 错误。有人可以帮我吗?

NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithDouble:0.4];
NSInteger power = 1001;

number = [number decimalNumberByRaisingToPower:power];

NSLog(@"%@",number);

也许我在数量太少的情况下达到了某种限制?任何事情都会有帮助!

编辑:哦,堆栈跟踪显示所有数字在实际上下文中中断时都是相同的。

4

1 回答 1

1

来自苹果文档:

NSDecimalNumber 是 NSNumber 的不可变子类,它提供了一个面向对象的包装器,用于进行 base-10 算术。实例可以表示可以表示为尾数 x 10^exponent 的任何数字,其中尾数是最多 38 位长的十进制整数,指数是从 –128 到 127 的整数

所以有一个限制,考虑浮点double

0.4 ^ 1001:
4e-399
or
0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

这比 NSDecimalNumber 可以处理的要大得多。

于 2013-11-06T00:56:17.573 回答