好的,所以我正在尝试将这个小数额提高到一个高幂。但出于某种原因,根据日志,我得到了一个非常高的数字,有时甚至是一个 NSDecimalOverflor 错误。有人可以帮我解决这个问题吗?
NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithDouble:0.4];
NSInteger power = 1001;
number = [number decimalNumberByRaisingToPower:power];
NSLog(@"%@",number);
也许我因为数字太小而达到了某种极限?任何事情都会有所帮助!
编辑:哦,堆栈跟踪显示所有数字在实际上下文中中断时都是相同的。
最佳答案
来自苹果文档:
NSDecimalNumber, an immutable subclass of NSNumber, provides an object-oriented wrapper for doing base-10 arithmetic. An instance can represent any number that can be expressed as mantissa x 10^exponent where mantissa is a decimal integer up to 38 digits long, and exponent is an integer from –128 through 127.
所以有一个限制,考虑浮点double
。
0.4^1001:
4e-399
或者
0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
这比 NSDecimalNumber 可以处理的要大得多。
关于ios - 带有分数的 NSDecimalNumber 在提升到高幂时返回大数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801980/