strtod
, _strtod_l
, wcstod
_wcstod_l
문자열을 배정밀도 값으로 변환합니다.
구문
double strtod(
const char *strSource,
char **endptr
);
double _strtod_l(
const char *strSource,
char **endptr,
_locale_t locale
);
double wcstod(
const wchar_t *strSource,
wchar_t **endptr
);
double _wcstod_l(
const wchar_t *strSource,
wchar_t **endptr,
_locale_t locale
);
매개 변수
strSource
변환할 Null 종료 문자열입니다.
endptr
검색을 중지하는 문자에 대한 포인터입니다.
locale
사용할 로캘입니다.
반환 값
strtod
는 표현이 오버플로를 발생시키는 경우를 제외하고 부동 소수점 숫자의 값을 반환하며, 이 경우 함수는 +/-HUGE_VAL
를 반환합니다. 기호 HUGE_VAL
는 나타낼 수 없는 값의 부호와 일치합니다. strtod
변환을 수행할 수 없거나 언더플로가 발생하는 경우 반환 0
됩니다.
wcstod
는 다음과 유사하게 값을 반환합니다 strtod
.
- 두 함수에서 모두 오버플로 또는 언더플로가 발생하면
errno
는ERANGE
로 설정됩니다. - 잘못된 매개 변수가 있는 경우 매개 변수
errno
유효성 검사에EINVAL
설명된 대로 잘못된 매개 변수 처리기로 설정되고 잘못된 매개 변수 처리기가 호출됩니다.
이 코드 및 기타 반환 코드에 대한 자세한 내용은 , , 및 를 참조하세요errno
._sys_nerr
_sys_errlist
_doserrno
설명
각 함수는 입력 문자열 strSource
을 double
로 변환합니다. strtod
함수는 strSource
을 배정밀도 값으로 변환합니다. strtod
는 숫자의 일부로 인식할 수 없는 첫 번째 문자에서 문자열 strSource
을 읽는 것을 중지합니다. 이 문자는 종료 null 문자일 수 있습니다. wcstod
은 strtod
의 와이드 문자 버전입니다. 이 함수의 strSource
인수는 와이드 문자열입니다. 그 외의 경우에는 이들 함수가 동일하게 작동합니다.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
일반 텍스트 루틴 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
---|---|---|---|
_tcstod |
strtod |
strtod |
wcstod |
_tcstod_l |
_strtod_l |
_strtod_l |
_wcstod_l |
현재 로캘의 범주 설정은 LC_NUMERIC
에 있는 radix 점 문자 strSource
의 인식을 결정합니다. 자세한 내용은 setlocale
를 참조하세요. 접미사가 없는 _l
함수는 현재 로캘을 사용하며, _strtod_l
전자가 전달된 로캘을 대신 사용 locale
한다는 점을 제외하면 동일합니다_strtod
. 자세한 내용은 Locale을 참조하세요.
그렇지 않은 NULL
경우 endptr
검색을 중지한 문자에 대한 포인터가 가리키는 위치에 endptr
저장됩니다. 올바른 숫자를 찾을 수 없거나 잘못된 밑을 지정하여 변환을 수행할 수 없는 경우에는 strSource
의 값이 endptr
에서 가리키는 위치에 저장됩니다.
strtod
는 strSource
다음 형식 중 하나의 문자열을 가리킵니다.
[whitespace
] [sign
] {digits
[radix
digits
] | radix
digits
} [{e
| E
} [sign
] digits
]
[whitespace
] [sign
] {0x
| 0X
} {hexdigits
[radix
hexdigits
] | radix
hexdigits
} [{p
| P
} [sign
] digits
]
[whitespace
] [sign
] {INF
| INFINITY
}
[whitespace
] [sign
] NAN
[sequence
]
선택적 선행 whitespace
은 무시되는 공백 및 탭 문자로 구성될 수 있습니다.
sign
는 더하기(+) 또는 빼기(-)입니다.
digits
은 하나 이상의 소수 자릿수입니다.
hexdigits
는 하나 이상의 16진수 숫자입니다.
radix
는 기본 "C" 로캘의 마침표(.) 또는 현재 로캘이 다르거나 지정된 경우 locale
로캘별 값인 radix 점 문자입니다.
A sequence
는 영숫자 또는 밑줄 문자의 시퀀스입니다.
10진수 및 16진수 형식 모두에서 radix 점 문자 앞에 숫자가 나타나지 않으면 radix 점 문자 앞에 하나 이상 나타나야 합니다.
10진수 형식에서 10진수 뒤에는 입문 문자(e
또는 E
) 및 선택적으로 부호 있는 정수로 구성된 지수가 뒤따를 수 있습니다.
16진수 형식에서 16진수 뒤에 지수가 올 수 있으며, 지수는 입문 문자(p
또는 P
)로 구성되고 선택적으로 부호 있는 10진수 정수(2)로 구성됩니다.
어느 형식에서든 지수 부분이나 반지름 점 문자가 없는 경우 radix 점 문자는 문자열의 마지막 숫자를 따르는 것으로 간주됩니다.
대/소문자 모두와 NAN
양식에서 INF
무시됩니다. 이러한 양식 중 하나에 맞지 않는 첫 번째 문자는 검사를 중지합니다.
이러한 함수의 UCRT 버전은 포트란 스타일(d
또는 D
) 지수 문자의 변환을 지원하지 않습니다. 이러한 비표준 확장은 CRT의 이전 버전에서 지원되었으므로 코드에 대한 중요한 변경 사항일 수 있습니다. UCRT 버전은 이전 버전에서 지원되지 않았던 16진수 문자열 및 NAN
값의 INF
라운드트립을 지원합니다. 이 지원으로 인해 코드가 호환되지 않는 변경이 발생할 수도 있습니다. 예를 들어 문자열 "0x1a
"은 이전 버전에서는 0.0으로 해석되지만 UCRT 버전에서는 26.0으로 해석 strtod
됩니다.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
strtod , _strtod_l |
C: <stdlib.h> C++: <cstdlib> 또는 <stdlib.h> |
wcstod , _wcstod_l |
C: <stdlib.h> 또는 <wchar.h> C++: <cstdlib> , <stdlib.h> 또는 <wchar.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_strtod.c
// This program uses strtod to convert a
// string to a double-precision value; strtol to
// convert a string to long integer values; and strtoul
// to convert a string to unsigned long-integer values.
//
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string, *stopstring;
double x;
long l;
int base;
unsigned long ul;
string = "3.1415926This stopped it";
x = strtod(string, &stopstring);
printf("string = %s\n", string);
printf(" strtod = %f\n", x);
printf(" Stopped scan at: %s\n\n", stopstring);
string = "-10110134932This stopped it";
l = strtol(string, &stopstring, 10);
printf("string = %s\n", string);
printf(" strtol = %ld\n", l);
printf(" Stopped scan at: %s\n\n", stopstring);
string = "10110134932";
printf("string = %s\n", string);
// Convert string using base 2, 4, and 8:
for (base = 2; base <= 8; base *= 2)
{
// Convert the string:
ul = strtoul(string, &stopstring, base);
printf(" strtol = %ld (base %d)\n", ul, base);
printf(" Stopped scan at: %s\n", stopstring);
}
// NaN
x = strtod("+nan", &stopstring);
printf("\n%f\n", x);
// INF
x = strtod("-INF", &stopstring);
printf("\n%f\n", x);
// e - exponent
x = strtod("1.18973e+49", &stopstring);
printf("\n%f\n", x);
// doesn't handle Fortran style
x = strtod("1.18973d+49", &stopstring);
printf("\n%f\n", x);
printf("No Fortran style support. Stopped parsing at %s\n", stopstring);
}
string = 3.1415926This stopped it
strtod = 3.141593
Stopped scan at: This stopped it
string = -10110134932This stopped it
strtol = -2147483648
Stopped scan at: This stopped it
string = 10110134932
strtol = 45 (base 2)
Stopped scan at: 34932
strtol = 4423 (base 4)
Stopped scan at: 4932
strtol = 2134108 (base 8)
Stopped scan at: 932
nan
-inf
11897299999999999421285862642874618947301378359296.000000
1.189730
No Fortran style support. Stopped parsing at d+49
참고 항목
데이터 변환
수학 및 부동 소수점 지원
멀티바이트 문자 시퀀스 해석
Locale
문자열에서 숫자 값 함수로
strtol
, wcstol
, _strtol_l
_wcstol_l
strtoul
, _strtoul_l
, wcstoul
_wcstoul_l
atof
, _atof_l
, _wtof
_wtof_l
localeconv
_create_locale
, _wcreate_locale
_free_locale