所以这是代码:

NSDecimalNumber *test=[[NSDecimalNumber alloc] initWithInt:65];
number3=[[NSDecimalNumber one] decimalNumberByDividingBy:[[[NSDecimalNumber alloc] initWithInt:10] decimalNumberByRaisingToPower:test.integerValue]];
number3=[number3 decimalNumberByMultiplyingBy:number3];

我预计程序会因下溢异常而终止,但事实并非如此。此外,采用 NSLog 将 number3 作为一个巨大的数字。如果我将“test”更改为低于 64 的任何值,它会给出正确的输出(即 10^(-2*test))。有谁知道这里发生了什么?我的意思是,它很容易解决,但除非我遗漏了一些东西(这很有可能),否则它似乎是 NSDecimalNumber 类中的错误。

最佳答案

这看起来像一个错误。
NSDecimalNumberdocumented to support exponents from -128 to +127 。显然,(10-65)2 的指数为 -130,超出范围。但是,它不是引发异常,而是将 -130 包装到 +126。
NSDecimalNumberdocumented default behavior 是“这些方法假设您对精度的需求不超过 38 个有效数字,并在它们试图除以 0 或产生一个太大或太小而无法表示的数字时引发异常。”

由于它没有引发异常,我会说你发现了一个错误。您可以在 http://bugreport.apple.com/ 报告。

10-07 19:12
查看更多