我刚刚编写了以下 C++ 代码,以便将小数转换为其相应的二进制格式。
double get_decimal_part(double num) {
long x = static_cast<long>(num);
return (num - static_cast<double>(x));
}
long get_real_part(double num) {
return static_cast<long>(num);
}
string fraction_to_binary(double num) {
string decimal_binary = "";
double decimal_part = get_decimal_part(num);
while ( decimal_part > 0 ) {
double temp = decimal_part * 2;
if ( get_real_part(temp) == 0 ) decimal_binary += "0";
else decimal_binary += "1";
decimal_part = get_decimal_part(temp);
}
return decimal_binary;
}
int main() {
cout << "3.50 - " << fraction_to_binary(3.50) << endl;
cout << "3.14 - " << fraction_to_binary(3.14) << endl;
}
输出将是: -
3.50 - 1
3.14 - 001000111101011100001010001111010111000010100011111
我对此有以下疑问:-
- 在“3.50”的情况下,我的实现将给出“1”作为输出——我该如何修改我的实现以解释 3.50 中的尾随“0”?
- 如果有任何库函数可以帮助我获得浮点数的精度?我猜我可以使用这些信息来修改我的实现。
[编辑] 我也尝试使用以下方法将浮点数转换为字符串,但它也无济于事。
stringstream ss;
ss << my_float;
cout << string(ss.str()) << endl;