Перевод mpfr_t в строку
Я занимаюсь разработкой приложения для расчётов с произвольной точностью и мне нужно выводить числа mpfr в виде «123.456».
Функция mpfr_get_str() возвращает строку без десятичной точки и через отдельную переменную возвращает экспоненту для данного основания.
Вопрос в том, каким образом можно преобразовать строку вида «123456» с экспонентой равной 3 в строку вида «123.456» и аналогично для любой (отрицательной и нулевой) экспоненты.
P.S.: Мне известно про функции mpfr_*printf, но они не подходят т.к. мне необходимо указывать основание, которое нужно выводить.
Ответы (1 шт):
Пример функции, которая печатает число с десятичной точкой. Используется функция 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);
}