int,float,double型と文字列char*型の相互変換について
2649 ワード
atoi、atof、itoa、itow関数はwindowsプラットフォームの下で文字列と数値の相互変換を実現する関数である.
これらの関数の宣言を見てみましょう.
1,atoi
プロトタイプ:
役割:文字列をint型に変換する;
2,atof
プロトタイプ:
double atof ( const char * str );
役割:文字列をdouble型に変換します.
3,itoa
プロトタイプ:
char * itoa ( int value, char * str, int base );
作用:int型から文字列型に変換する;
(うち2<=base<=36、baseは進数、例えばbase=10、10進数、base=8は8進数)
4,itow
プロトタイプ:
wchar_t * _itow( int value, wchar_t *str, int radix ); //2<=radix<=36
作用:int型から幅文字列型に変換する;
以上の4つの関数はintと文字列間の相互変換を解決し、文字列は浮動小数点型に変換することができますが、浮動小数点型から文字列に変換するにはどのように解決すればいいのでしょうか.
方法1:利用中のstringstream
方法2:
関数を使う
char* ecvt(double value, int ndigit, int *decpt, int *sign);
パラメータ:
value:変換する二重精度浮動小数点数.
ndigit:格納されている有効な数値ビット数.
*decpt:格納されている小数点の位置.
*sign:変換された数の記号.
戻り値:
char*:生成された文字列を指します.
注記:この関数のヘッダファイルは「stdlib.h」です.
evctのほかに、類似の関数gvct、fvctがあります.詳細は以下のとおりです.http://blog.csdn.net/zhuimengzh/article/details/6767021
fvctとevctは基本的に同じですが、gvctの例を見てみましょう.
次のようになります.
関数名:gcvt関数プロトタイプ:char*gcvt(double value,int ndec,char*buf)関数機能:数値valueを長さndecに変換する文字列関数戻ります:bufへのポインタパラメータ説明:value-変換する浮動小数点数値、ndec-変換後の長さが属するファイル:
これらの関数の宣言を見てみましょう.
1,atoi
プロトタイプ:
int atoi ( const char * str );
役割:文字列をint型に変換する;
2,atof
プロトタイプ:
double atof ( const char * str );
役割:文字列をdouble型に変換します.
3,itoa
プロトタイプ:
char * itoa ( int value, char * str, int base );
作用:int型から文字列型に変換する;
(うち2<=base<=36、baseは進数、例えばbase=10、10進数、base=8は8進数)
4,itow
プロトタイプ:
wchar_t * _itow( int value, wchar_t *str, int radix ); //2<=radix<=36
作用:int型から幅文字列型に変換する;
以上の4つの関数はintと文字列間の相互変換を解決し、文字列は浮動小数点型に変換することができますが、浮動小数点型から文字列に変換するにはどのように解決すればいいのでしょうか.
方法1:利用中のstringstream
string DoubleToString(double Input)
{
stringstream Oss;
Oss<
方法2:
関数を使う
char* ecvt(double value, int ndigit, int *decpt, int *sign);
パラメータ:
value:変換する二重精度浮動小数点数.
ndigit:格納されている有効な数値ビット数.
*decpt:格納されている小数点の位置.
*sign:変換された数の記号.
戻り値:
char*:生成された文字列を指します.
注記:この関数のヘッダファイルは「stdlib.h」です.
#include
#include
#include
int main(void)
{
char *string;
double value;
int dec, sign;
int ndig = 10;
value = 9.876;
string = ecvt(value, ndig, &dec, &sign);
printf("string = %s dec = %d sign = %d
", string, dec, sign);
value = -123.45;
ndig= 15;
string = ecvt(value,ndig,&dec,&sign);
printf("string = %s dec = %d sign = %d
",
string, dec, sign);
value = 0.6789e5;
ndig = 5;
string = ecvt(value,ndig,&dec,&sign);
printf("string = %s dec = %d sign = %d
", string, dec, sign);
return 0;
}
evctのほかに、類似の関数gvct、fvctがあります.詳細は以下のとおりです.http://blog.csdn.net/zhuimengzh/article/details/6767021
fvctとevctは基本的に同じですが、gvctの例を見てみましょう.
#include
#include
int main()
{
char str[25];
double num;
int sig=5;
num=9.876;
gcvt(num,sig,str);
printf( "string=%s
",str);
num=-123.4567;
gcvt(num,sig,str);
printf( "string=%s
",str);
num=0.678e5;
gcvt(num,sig,str);
printf( "string=%s
",str);
return(0);
}
次のようになります.
関数名:gcvt関数プロトタイプ:char*gcvt(double value,int ndec,char*buf)関数機能:数値valueを長さndecに変換する文字列関数戻ります:bufへのポインタパラメータ説明:value-変換する浮動小数点数値、ndec-変換後の長さが属するファイル: