格式化一组NSDecimalNumber值

时间:2012-08-10 15:42:33

标签: cocoa-touch math formatting nsdecimalnumber

我正在开发一个应用程序,我需要获取几组数值(当前存储为NSDecimalNumber),并将它们显示在列中。每组的幅度大致相同,但每组的幅度可能会发生变化,我不会提前知道它们是什么。所以可能是(1.23,2.3,1.567)和另一个(1234.1,2345,1999.4)的值。

为了使列排列,并知道我需要多少空间,我想做的是为每组数字找出我需要的格式宽度。换句话说,最大整数位数和最大小数位数。对于上面的例子:第一种情况是1和3,第二种情况是4和1。

现在,NSDecimal表示将通过组合尾数的长度和指数的值直接回答这个问题。问题是,该结构的字段是显式私有的,并且似乎没有任何API可以从中获取尾数和指数的值。

解决方法可能是将每个数字转换为POSIX语言环境中的字符串,然后测量其长度和小数点的位置。但这似乎还有很长的路要走。

我的C数学非常粗略,但是我想通过将我的小数转换为double然后检查它(或者是标准库函数或戳戳)来获取此信息有一些方法比特)和做一些日志。我不知道究竟是什么,或者我是否应该关注转换为有损代表。

是否有更直接和/或更有效的方法来获取此信息?

1 个答案:

答案 0 :(得分:0)

无论您使用何种特殊技术,如果您希望它是全自动的,您必须对所有数字进行某种先前的迭代。而且你也将显示所有数字。因此,提前将它们全部转换为字符串并保存这些字符串(例如在并行数组中)似乎不是世界上最糟糕的事情,您可以直接测量总长度。要处理排队的小数点,请计算转换迭代期间的最大和最小数字。这两个数字将为您提供整数部分的最大宽度。如果最小数字为负数,请记住为减号分配空间。