Перевод float в десятичную систему счисления

Нужно написать код, который переводит вещественное число из указанной системы счисления в десятичную.

Написала такой для целочисленных типов данных, но не понимаю как так же переводить float. Подскажите, пожалуйста, как это можно реализовать.

Вот мой код для целочисленных значений

string BinIntStr;
int BinInt;
bool bool_res{};
int base;

cout << "Укажите систему счисления вводимого значения: ";
cin >> base;

cout << "Введите число типа int: ";

do
{
    cin >> BinIntStr;

    try
    {
        size_t ind{};

        BinInt = stoi(BinIntStr, &ind, base);

        bool_res = ind == BinIntStr.size();
    }
    catch (...)
    {
        cout << "Вы ввели некорректное значение!" << endl;
        cout << "Попробуйте ещё раз: ";
        bool_res = false;
    }

} while (!(bool_res));

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

Автор решения: Zhihar

проблема вашего кода (для целых чисел) в одном - вы используете готовую функцию библиотеки c++ для перевода строки в число выбранной системы счисления, которая умеет работать только с 2 - 32 ричными системами счисления, стоит ввести 33 ричную и ваш код работать не будет :))

поэтому давайте уже делать код честно, а именно:

  1. пользователь вводит строку

  2. вы представляете строку в виде массива и каждый символ строки воспринимаете как цифру N-ричной системы счисления и переводите ее в десятичное число

  3. вычисляете само десятичное число по формуле

    num = sum base^i * n(i)

И аналогично вы поступаете с числом с плавающей запятой - только предварительно строку придется разбить на две - справа от точки и слева от точки

  1. строку слева от точки вы переводите аналогично работе с целыми числами

  2. строку справа от точки вы переводите почти аналогично с целыми числами (только степени будут отрицательными)

И конечно готовьтесь к тому, что будет потеря точности для почти всех чисел - особенность перевода дробных чисел

→ Ссылка