Перевод 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 шт):
проблема вашего кода (для целых чисел) в одном - вы используете готовую функцию библиотеки c++ для перевода строки в число выбранной системы счисления, которая умеет работать только с 2 - 32 ричными системами счисления, стоит ввести 33 ричную и ваш код работать не будет :))
поэтому давайте уже делать код честно, а именно:
пользователь вводит строку
вы представляете строку в виде массива и каждый символ строки воспринимаете как цифру N-ричной системы счисления и переводите ее в десятичное число
вычисляете само десятичное число по формуле
num = sum base^i * n(i)
И аналогично вы поступаете с числом с плавающей запятой - только предварительно строку придется разбить на две - справа от точки и слева от точки
строку слева от точки вы переводите аналогично работе с целыми числами
строку справа от точки вы переводите почти аналогично с целыми числами (только степени будут отрицательными)
И конечно готовьтесь к тому, что будет потеря точности для почти всех чисел - особенность перевода дробных чисел