Существует много дискуссий о методах преобразования строк с плавающей точкой в десятичную с плавающей точкой, но я не нашел решения своей проблемы в C ++ (у python, C # и т. Д. Есть хорошие и быстрые). Позвольте мне вкратце описать алгоритм.
Сначала мы вводим систему счисления начального числа и вводим число с плавающей точкой в строковую переменную.
int sys = 0;
std::cin >> sys; //example: 16
string input = "";
std::cin >> input; //example: 7ff.12c
Затем разделите input на right (double) и left (int). Затем вызовите функцию void floatToDec (ввод строки, int sys, флаг char) для обеих этих частей (флаг 'l' означает флаг левой части 'r' означает правую часть). Чтобы сохранить result_int и result_double , мы делаем их глобальными.
Функция:
string alf = { '0','1','2', .. , 'x', 'y', 'z' }
int counter = 0;
int_temp = 0;
for (int i = size(input); i >= 0; i--){
int index = indexOf(input[i], alf);
switch (flag) {
case 'r':
result_double += index * pow(sys, counter);
counter--;
break;
case 'l':
int_temp = result_int + index * pow(sys, counter);
if (int_temp < 0) {
result_int = 0;
return 1; // out of integer borders
}
result_int = int_temp;
counter++;
break;
}
}
return 0;
После выполнения функции для обеих частей мы суммируем их. в один поплавок. Эта сумма является результатом
ПРОБЛЕМА
Целочисленная часть этого числа с плавающей запятой не может быть больше, чем целочисленное максимальное значение (2 147 483 647 в декабре), но число с плавающей запятой может быть 2 ^ 38-1 как показатель степени имеет 8 бит. То же самое с двойной, его показатель степени имеет 11 битов, и значение может быть 2 ^ 52-1. (Если я не ошибаюсь).
Итак, как я могу решить эту проблему? Может быть есть другой способ конвертации?