帮忙见见这段代码

帮忙看看这段代码/*十进制转成二进制 *分别对整数和小数部分转化再合并 */ #includeiostream#includest

帮忙看看这段代码


/*十进制转成二进制
 *分别对整数和小数部分转化再合并
 */ 
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string return_int(int origin)//对整数部分转成二进制
{
string goal;
int remain;
while(origin!=0)
{
remain=origin%2;
origin/=2;
goal+=to_string(remain);
}
reverse(goal.begin(),goal.end());//反转
return goal;
}
string return_double(double origin)//对小数部分转成二进制
{
int temp;
double flag;
string goal;
while(origin>1e-6)
{
flag=2*origin;
if(static_cast<int>(flag)==0)
temp=0;
else
{
temp=1;
origin=flag-1.0;
}
goal+=to_string(temp);
}
return goal;
}
int main()
{
cout<<return_int(10);
cout<<return_double(0.34);
system("pause");
return 0;
}

整数转成二进制输出结果正确,小数部分出错。单步调试时,竟然整数部分却每次都是字符串出错,但仅仅运行整数部分,return0。感觉有些无语。。求指点!!
[解决办法]

/*十进制转成二进制
 *分别对整数和小数部分转化再合并
 */ 
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char to_string(int d)
{
return d + '0';
}
string return_int(int origin)//对整数部分转成二进制
{
    string goal;
    int remain;
    while(origin!=0)
    {
        remain=origin%2;
        origin/=2;
        goal+=to_string(remain);
    }
    reverse(goal.begin(),goal.end());//反转
    return goal;
}
string return_double(double origin)//对小数部分转成二进制
{
    int temp;
    string goal;
    while(origin>1e-6)
    {
        origin *= 2;
        if(origin >= 1)
{
temp = 1;
origin -= 1;
}
else
{
temp = 0;
}
        goal+=to_string(temp);
    }
    return goal;
}
int main()
{
    cout<<return_int(10)<<endl;
    cout<<return_double(0.8125)<<endl;
    //system("pause");
    return 0;
}

[解决办法]
应该设计成可以自己输入数字验证的比较好吧
[解决办法]
return_double函数的逻辑有问题。

仔细看1楼代码的return_double的函数体部分。看看自己的和1楼给出的代码有什么不同?