Перевод mpfr_t в строку

Я занимаюсь разработкой приложения для расчётов с произвольной точностью и мне нужно выводить числа mpfr в виде «123.456».

Функция mpfr_get_str() возвращает строку без десятичной точки и через отдельную переменную возвращает экспоненту для данного основания.

Вопрос в том, каким образом можно преобразовать строку вида «123456» с экспонентой равной 3 в строку вида «123.456» и аналогично для любой (отрицательной и нулевой) экспоненты.

P.S.: Мне известно про функции mpfr_*printf, но они не подходят т.к. мне необходимо указывать основание, которое нужно выводить.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Пример функции, которая печатает число с десятичной точкой. Используется функция mpfr_get_str и аккуратная печать кусков полученной строки:

void print(mpfr_t x, int base) {
    mpfr_exp_t exp;
    char *s = mpfr_get_str(NULL, &exp, base, 0, x, MPFR_RNDN);
    char *ss = s;
    if (s[0] == '-') {
        printf("-");
        ++ss;
    }
    if (exp > 0) {
        printf("%.*s.%s", (int)exp, ss, ss + exp);
    } else {
        printf("0.");
        for (int i = 0; i < -exp; ++i) {
            printf("0");
        }
        printf("%s", ss);
    }
    mpfr_free_str(s);
}
→ Ссылка