我试图创建一个小函数来转换整数和浮点数并将它们保存为字符串,双重类型,一切正常,但是当我在逗号后面输入许多数字时,出现问题。
#include <iostream>
#include <cmath>
using namespace std;
/////////////////////////////////////CONVERTer FUNCTION/////////
double StrToNum(string InStr)
{
int a=0;
double b,OutInt=0,DecVal=0,DoubleOut;
for(a;a<=InStr.length();a++)
{
if(InStr[a]=='.' || InStr[a]==','){break;}
if(InStr[a]=='0'){OutInt=OutInt*10+0;}
if(InStr[a]=='1'){OutInt=OutInt*10+1;}
if(InStr[a]=='2'){OutInt=OutInt*10+2;}
if(InStr[a]=='3'){OutInt=OutInt*10+3;}
if(InStr[a]=='4'){OutInt=OutInt*10+4;}
if(InStr[a]=='5'){OutInt=OutInt*10+5;}
if(InStr[a]=='6'){OutInt=OutInt*10+6;}
if(InStr[a]=='7'){OutInt=OutInt*10+7;}
if(InStr[a]=='8'){OutInt=OutInt*10+8;}
if(InStr[a]=='9'){OutInt=OutInt*10+9;}
}
for(a=0;a<=InStr.length();a++)
{
if(InStr[a]=='.' || InStr[a]==','){a+=1; b=1; break;}
}
for(a;a<=InStr.length();a++)
{
if(InStr[a]=='0'){ b+=1;}
if(InStr[a]=='1'){DecVal=DecVal+1/pow(10,b); b+=1;}
if(InStr[a]=='2'){DecVal=DecVal+2/pow(10,b); b+=1;}
if(InStr[a]=='3'){DecVal=DecVal+3/pow(10,b); b+=1;}
if(InStr[a]=='4'){DecVal=DecVal+4/pow(10,b); b+=1;}
if(InStr[a]=='5'){DecVal=DecVal+5/pow(10,b); b+=1;}
if(InStr[a]=='6'){DecVal=DecVal+6/pow(10,b); b+=1;}
if(InStr[a]=='7'){DecVal=DecVal+7/pow(10,b); b+=1;}
if(InStr[a]=='8'){DecVal=DecVal+8/pow(10,b); b+=1;}
if(InStr[a]=='9'){DecVal=DecVal+9/pow(10,b); b+=1;}
}
DoubleOut=OutInt+DecVal;
return DoubleOut;
}
/////////////////////////////////////CONVERTer FUNCTION/////////
int main ()
{
string InStr;
double DoubleOut;
cout<<"Please input number(will be saved as string)"<<endl;
cin>>InStr;
DoubleOut=StrToNum(InStr);
cout<<"Integer converted from string= "<<DoubleOut<<endl;
system("PAUSE");
return 0;
}
答案 0 :(得分:1)
将字符串转换为浮点数并非易事。显而易见的方法是使用标准的C或C ++库,例如strtod()
。如果你真的想自己转换价值观,请看看威廉克林格的How to Read Floating Point Numbers Accurately。
您没有在问题中指定“很多”,但请注意double
只能准确地表示15个,实际上是std::numeric_limits<double>::digits10
个十进制数字。如果您有多个数字,则需要对结果进行舍入。
从实现的角度来看:一旦确定某个字符c
是一个数字,您就可以使用c - '0'
来计算该数字的值,也就是说,您可能希望将此公式用于{ {1}}。此外,使用isdigit()
相当昂贵,可能不如计算运行因子那么准确。