C++十进制小数转二进制
2020-05-02 本文已影响0人
Virtualer
之前经常接触的都是十进制整数转换二进制,记录一下十进制小数转化二进制的方法。
小数分为整数区域和小数区域,以小数点相隔开。整数部分转化方式是对2取余除2的方法,而小数部分则是相反,对小数乘2取整数部分的方法:
小数部分转化二进制(图片来自公众号:IT服务圈儿)
根据这种方式就可以自己实现一个转化器,代码搞起来
#include <iostream>
#include <string>
using namespace std;
string IntegerPart(const string &str)
{
string retStr;
long temp = strtol(str.c_str(), nullptr, 10);
while (temp) {
retStr += to_string(temp % 2);
temp /= 2;
}
return retStr.empty() ? "0" : retStr;
}
string DecimalPart(const string &str)
{
string retStr;
float temp = strtof(str.c_str(), nullptr);
while (temp != 0.0) {
retStr += to_string((int) (temp * 2));
string tempStr = to_string(temp * 2);
tempStr[0] = '0';
temp = strtof(tempStr.c_str(), nullptr);
}
return retStr;
}
int main(int argc, char** argv)
{
string inputStr;
while (getline(cin, inputStr)) {
size_t pos = inputStr.find('.');
string integerStr;
string decimalStr;
if (pos == string::npos) {
decimalStr = "";
integerStr = IntegerPart(inputStr);
} else {
integerStr = inputStr.substr(0, inputStr.find('.'));
decimalStr = inputStr.substr(inputStr.find('.') + 1, inputStr.size());
integerStr = IntegerPart(integerStr);
decimalStr = DecimalPart(string("0.") + decimalStr);
}
if (!decimalStr.empty()) {
integerStr += ".";
integerStr += decimalStr;
}
cout << integerStr << endl;
}
return 0;
}