objective-c - 在 Objective-C 中获取 NSDecimalNumber 的指数?

标签 objective-c ios

给定一个 NSDecimalNumber,我如何找到指数(比例)?

虽然原则上应该可以通过首先转换为 NSString 然后进行一些丑陋的字符串操作来做到这一点,但我宁愿避免它。

使用 Java BigDecimal,我可以调用 scale()获取比例的方法。

NSDecimalNumber 是否存在类似的简洁方法?

最佳答案

如果出于某种原因你真的需要指数(除了简单地显示,你可以配置一个数字格式化程序来给你),你可以使用 -doubleValue 方法获得原始 double 值,然后使用 frexp(3) 获取尾数和指数值。

用于执行和存储 float 学的对象背后的整个设计是您可以更有效地处理计算和精度错误,但是,该设计的局限性在于一旦您从标量(例如 double 或尾数和指数的组合),您应该留在对象框架内,而不是转换回(可能)不太精确的格式。

我建议使用 -doubleValue 是最好的选择,因为其他答案建议访问可能会更改的私有(private)结构记录,并且使用这些建议不会造成精度损失,而事实上,很可能是(如头文件中所述)。转换为 double 时,您和那些使用/阅读您的代码的人确切地知道可能出现的精度错误是什么,因为该类型已被很好地理解并且有很好的记录。

最后,如果您想确定转换是否会导致错误,您可以创建并使用 NSDecimalNumberHandler这将为您提供有关转换为双标量类型时可能出现的舍入/精度误差类型的信息。

我还建议您使用 apple bug reporter 添加一个增强请求,声明您希望直接访问指数以及可能添加更高精度的类型,例如 -longDoubleValue 方法。

编辑包含更多信息

关于objective-c - 在 Objective-C 中获取 NSDecimalNumber 的指数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643297/

相关文章:

objective-c - 使用 addSubview 动态添加 UITextField 的 UITableViewCell - 如何在 'return' 击中键盘时获取 UITextField 值

ios - 通过 paypal 汇款 (iOS paypal sdk)

iphone - 使用 Flash iOS 开发连接到互联网

ios - iOS 7:从json响应中选择特定对象

ios - 如何获取特定的通知计数

objective-c - 将 Facebook 社交插件与 FB iOS SDK 连接

ios - 我如何从嵌套的 NSMutableDictionary 中获取 numberOfRowsInSection?

android - 在没有应用商店和市场的情况下安装 ios 和 android 应用程序的最佳方法是什么?

ios - CollectionView 单元格未显示

ios - UITextView 在检测到 Action 时更改字体