12-2-나.실수와 문자열

실수는 정수에 비해 소수점 이하를 가질 뿐만 아니라 부동 소수점 표기법이 다소 복잡해서 정수보다는 변환하기가 훨씬 더 까다롭다. 다음 함수들은 실수를 문자열로 변환한다.

 

char *gcvt(double value, int digits, char *buffer);

char *ecvt(double value, int count, int *dec, int *sign);

char *fcvt(double value, int count, int *dec, int *sign);

 

원형에서 보다시피 이 함수들은 itoa 함수들보다는 훨씬 더 복잡한 형태를 가지고 있으며 실제로 사용하기도 까다롭다. 뿐만 아니라 이 함수들보다 더 좋은 변환 방법이 있기 때문에 이 함수들이 실제로 꼭 필요한 경우란 무척 드물다. 그래서 여기서는 이런 함수들도 있다는 것만 소개하기로 한다. 이 함수들을 꼭 써보고 싶다거나 이 함수를 호출하는 예제를 분석해야 한다면 레퍼런스를 참조하기 바란다.

다음 함수는 문자열을 실수로 변환한다. 두 함수는 기능이 거의 동일하되 strtod 함수는 변환 불가 문자를 만날 때 그 위치를 endptr로 리턴한다는 정도만 다르다. 편의성면에서는 atof가 좀 더 사용하기 쉽다.

 

double atof(const char *string);

double strtod(const char *nptr, char **endptr);

 

atof("3.14")는 문자열 형태로 저장되어 있는 "3.14"를 실수형으로 변환한다. atof("-1.23e4") 형식의 부동 소수점 형태로 표기된 문자열도 변환할 수 있다. atof 함수도 atoi 함수와 마찬가지로 중간에 변환 불가한 문자를 만날 경우 에러를 리턴하는 대신 가능한 부분까지만 변환한다.