私はいくつかの数値セット (現在は として保存されています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
それを調べて (標準ライブラリ関数を使用するか、ビットを突いて)、いくつかのログを作成することで、この情報を取得する方法があると思います。どのように正確なのか、または損失のある表現への変換について心配する必要があるのか どうかはわかりません。
この情報を取得するためのより直接的かつ/またはより効率的な方法はありますか?