Написал функцию, которая, как мне хочется, должна переводить дробное число в двоичное, но она не работает.
Целая часть числа преобразуется в двоичное с помощью встроенной функции itoa(int, char array, 2); , для остатка после точки я написал свою функцию dec_bin, в которой число умножается на 2, потом первый символ запоминается, меняется на 0 и так далее...
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
string dec_bin(string dec, int steps) {
double decimal = stof(dec); // 0.987
string str_decimal = "";
string decimal_bin = "";
for(int i = 0; i < steps; i++) {
decimal *= 2; //1.974
str_decimal = to_string(decimal);
decimal_bin += str_decimal[0]; // "1", "11", "111" ...
str_decimal = str_decimal.replace(0, 1, "0"); // "0.974"
decimal = stof(str_decimal); // 0.974
}
return decimal_bin;
}
string float_to_bin(string input, int steps) {
string result, whole;
short sign = 0; // + by default
char whole_bin[20];
if(input.find('-') != -1) // in "-1.974"
sign = 1; // for -1.974
int point_pos = input.find('.');
if(point_pos != -1) {
whole = input.substr(0, point_pos);
string dec = "0" + input.substr(point_pos, input.size() - point_pos); //"0.987"
}
else {
whole = input;
}
int int_whole = stoi(whole);
itoa(int_whole, whole_bin, 2); //""
if(point_pos != -1) {
string dec_bin;
}
if(point_pos != -1) {
string whole_bin_res(20, whole_bin); // convert char to string
result =whole_bin_res + "." + dec_bin(to_string(dec), steps);
}
else
result = whole_bin;
return sign, result;
}
int main(int argc, char* argv[]) {
cout << "Enter a decimal number: ";
string input = "12.987";
cout << float_to_bin(input, 3);
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей