1

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

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

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

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

我对我的 C 数学很粗略,但我猜有一些方法可以通过将我的小数转换为 a 来获取这些信息double,然后检查它(标准库函数或戳位)并做一些日志。我不知道究竟如何,或者我是否应该担心转换为有损表示。

是否有更直接和/或更有效的方式来获取这些信息?

4

1 回答 1

0

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

于 2012-11-20T16:24:19.700 回答