1

私はいくつかの数値セット (現在は として保存されていますNSDecimalNumber) を取り、それらを列に表示する必要があるアプリに取り組んでいます。各セットのマグニチュードはほぼ同じですが、各セットのマグニチュードは変わる可能性があり、それらが何であるかは前もってわかりません。したがって、1 つは (1.23、2.3、1.567) のような値であり、もう 1 つは (1234.1、2345、1999.4) のような値です。

列を整列させ、必要なスペースを知るために、数値のセットごとに、必要なフォーマットの幅を把握する必要があります。つまり、整数桁の最大数と小数桁の最大数です。上記の例では、最初のケースでは 1 と 3、2 番目のケースでは 4 と 1 です。

ここで、NSDecimal表現は、仮数の長さと指数の値を組み合わせることにより、これに直接答えます。問題は、その構造体のフィールドが明示的に非公開であり、そこから仮数と指数の値を取得する API がないように見えることです。

回避策として、各数値を POSIX ロケールの文字列に変換し、その長さと小数点の位置を測定することが考えられます。しかし、それは非常に長い道のりのようです。

私の C 数学はかなり大ざっぱですが、10 進数を に変換し、doubleそれを調べて (標準ライブラリ関数を使用するか、ビットを突いて)、いくつかのログを作成することで、この情報を取得する方法があると思います。どのように正確なのか、または損失のある表現への変換について心配する必要があるのか​​ どうかはわかりません。

この情報を取得するためのより直接的かつ/またはより効率的な方法はありますか?

4

1 に答える 1

0

使用する特定の手法が何であれ、それを完全に自動化したい場合は、すべての数値に対して何らかの事前反復を行う必要があります。また、すべての数値も表示します。したがって、事前にすべてを文字列に変換し、これらの文字列をたとえば並列配列に保存することは、世界で最悪のことのようには見えず、全長を直接測定できます。小数点の並びを処理するには、変換の反復中に最大数と最小数を計算します。これらの 2 つの数値は、整数部分の最大幅を示します。最小数が負の場合は、マイナス記号にスペースを割り当てることを忘れないでください。

于 2012-11-20T16:24:19.700 に答える