Я работаю над приложением, в котором мне нужно взять несколько наборов числовых значений (в настоящее время хранящихся как NSDecimalNumber
) и отобразить их в столбцах. Каждый набор будет иметь примерно одинаковую величину, но величина каждого набора может измениться, и я не буду знать заранее, что это такое. Таким образом, одним значением может быть (1.23, 2.3, 1.567), а другим (1234.1, 2345, 1999.4).
Чтобы выровнять столбцы и узнать, сколько места мне понадобится, я бы хотел выяснить для каждого набора чисел ширину нужного мне формата. Другими словами, максимальное количество разрядов целого числа и максимальное количество разрядов дробной части. Для приведенных выше примеров: 1 и 3 в первом случае, 4 и 1 во втором.
Теперь _ 2_ ответит на этот вопрос напрямую, объединив длину мантиссы и значение показателя степени. Проблема в том, что поля этой структуры являются явно частными, и, похоже, не существует какого-либо API для получения из них значений мантиссы и экспоненты.
Обходной путь может заключаться в преобразовании каждого числа в строку в локали POSIX, а затем измерении его длины и положения десятичной точки. Но это похоже на очень долгий путь.
Я довольно отрывочен в своей математике на C, но я предполагаю, что есть какой-то способ получить эту информацию, преобразовав мою десятичную дробь в double
, а затем изучив это (либо стандартные библиотечные функции, либо выковыривая биты) и сделав несколько журналов . Я не знаю, как именно, и должен ли я беспокоиться о преобразовании в представление с потерями.
Есть ли более прямой и / или более эффективный способ получения этой информации?