ios - 带有分数的 NSDecimalNumber 在提升到高幂时返回大数?

标签 ios iphone objective-c math nsdecimalnumber

好的,所以我正在尝试将这个小数额提高到一个高幂。但出于某种原因,根据日志,我得到了一个非常高的数字,有时甚至是一个 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/

相关文章:

ios - 新 iOS 项目模板中的 Xcode Storyboard

ios - 如何调整 UIImage 的大小以减小上传图片的大小

ios - stackView 在中心 scrollView

iphone - iPod touch 与 iPhone 4 作为开发平台的比较(iOS 4.1)

iphone - 查找 NSTimer 是否无效

objective-c - Objective-C中如何在指定时间唤醒线程

iphone - 使用 UIScrollView

iphone - 实现照片应用程序的全屏栏消失行为

objective-c - 多个 UIView 动画

objective-c - if 语句中的 or and 除外