我在做一个工资管理系统,以下俩个函数代码总是看不懂,有没有可以帮忙解释以下,功能作用,注释
double string_to_double(string& s1)
{
int left=0;
double num=0;
int i=0;
while(i<s1.size())
{
if(s1[i]=='.')
break;
i++;
left++;
}
i++;
for(double j=0.1;i<s1.size();j=j*0.1,i++)
{
num+=(s1[i]-48)*j;
}
int k=0;
while(left--)
{
int i=1;
for(int j=0;j<left;j++)
i=i*10;
num+=(s1[k]-48)*i;
k++;
}
return num;
}
string double_to_string(double num) //double限两位小数 限1500000000以内
{
string s1;
int i=num; //整数部分
num=num-i; //小数部分
string temp;
while(i!=0)
{
temp+=i%10+48;
i=i/10;
}
for(i=temp.size()-1;i>=0;i--)
s1+=temp[i];
if(num==0)
return s1;
s1+='.';
for(i=0;i<2;i++)
{
num=num*10;
s1+=(int)num%10+48;
}
return s1;
}
// 将 string 类型的字符串 s1 转换为 double 类型
// 函数传入一个 string 类型的数据,返回一个 double 类型的数据
double string_to_double(string& s1)
{
int left = 0;
double num = 0;
int i = 0;
while (i < s1.size())
{
if (s1[i] == '.')
break;
i++;
left++;
}
i++;
for (double j = 0.1; i < s1.size(); j = j * 0.1, i++)
{
num += (s1[i] - 48) * j;
}
int k = 0;
while (left--)
{
int i = 1;
for (int j = 0; j < left; j++)
i = i * 10;
num += (s1[k] - 48) * i;
k++;
}
return num;
}
// 将数字 num 转换为 string 类型
// 函数传入一个 double 类型的数据,返回一个 string 类型的数据
string double_to_string(double num) //double限两位小数 限1500000000以内
{
string s1;
int i = num; //整数部分
num = num - i; //小数部分
string temp;
while (i != 0)
{
temp += i % 10 + 48;
i = i / 10;
}
for (i = temp.size() - 1; i >= 0; i--)
s1 += temp[i];
if (num == 0)
return s1;
s1 += '.';
for (i = 0; i < 2; i++)
{
num = num * 10;
s1 += (int)num % 10 + 48;
}
return s1;
}
double string_to_double(string& s1) //string类型转换为double类型
{
int left = 0;
double num = 0;
int i = 0;
while (i < s1.size()) //通过s1长度循环执行确定整数部分长度
{
if (s1[i] == '.') //执行到.后停止
break;
i++;
left++; //left记录整数部分长度
}
i++;
for (double j = 0.1; i < s1.size(); j = j * 0.1, i++) //计算小数部分值
{
num += (s1[i] - 48) * j;
}
int k = 0;
while (left--)
{
int i = 1;
for (int j = 0; j < left; j++) //计算整数部分值
i = i * 10;
num += (s1[k] - 48) * i;
k++;
}
return num;
}
string double_to_string(double num) ////double类型转换为string类型
{
string s1;
int i = num; //整数部分 ,强制转换为int型会自动省略小数部分
num = num - i; //小数部分
string temp;
while (i != 0)
{
temp += i % 10 + 48; //参考ascii表,数字与字符差48
i = i / 10;
}
for (i = temp.size() - 1; i >= 0; i--) //记录整数部分
s1 += temp[i];
if (num == 0)
return s1;
s1 += '.';
for (i = 0; i < 2; i++) //记录小数部分
{
num = num * 10;
s1 += (int)num % 10 + 48;
}
return s1;
}