strtod
, _strtod_l
, wcstod
, _wcstod_l
Dizeleri çift duyarlıklı bir değere dönüştürün.
Sözdizimi
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
);
Parametreler
strSource
Dönüştürülecek null ile sonlandırılan dize.
endptr
Taramayı durduran karakter işaretçisi.
locale
Kullanılacak yerel ayar.
Dönüş değeri
strtod
, temsilin taşmalara neden olacağı durumlar dışında kayan nokta numarasının değerini döndürür ve bu durumda işlev +/-HUGE_VAL
döndürür. işareti HUGE_VAL
, temsil edilmeyecek değerin işaretiyle eşleşir. strtod
dönüştürme gerçekleştirilemiyorsa veya bir yetersizlik oluşursa döndürür 0
.
wcstod
ile benzer değerler strtod
döndürür:
- Her iki işlev için de
errno
taşma veya yetersizlik oluşursa olarak ayarlanırERANGE
. - Geçersiz parametreler varsa,
errno
parametresi olarak ayarlanırEINVAL
ve parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi çağrılır.
Bu ve diğer iade kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
Her işlev giriş dizesini strSource
öğesine double
dönüştürür. strtod
işlevi çift duyarlıklı bir değere dönüştürülürstrSource
. strtod
dizesini strSource
bir sayının parçası olarak tanıyamayan ilk karakterde okumayı durdurur. Bu karakter, sonlandırıcı null karakter olabilir. wcstod
geniş karakterli strtod
bir sürümüdür; strSource
bağımsız değişkeni geniş karakterli bir dizedir. Bu işlevler aynı şekilde davranır.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Genel metin yordamı eşlemeleri
TCHAR.H olağan |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_tcstod |
strtod |
strtod |
wcstod |
_tcstod_l |
_strtod_l |
_strtod_l |
_wcstod_l |
LC_NUMERIC
Geçerli yerel ayarın kategori ayarı, içindeki strSource
radix noktası karakterinin tanınmasını belirler. Daha fazla bilgi için bkz. setlocale
. Soneki _l
olmayan işlevler geçerli yerel ayarı kullanır; _strtod_l
öncekinin bunun yerine geçirilen öğesini kullanması dışında ile locale
aynıdır_strtod
. Daha fazla bilgi için bkz . Yerel Ayar.
değilse endptr
NULL
, taramayı durduran karakterin işaretçisi tarafından endptr
işaret edilen konumda depolanır. Dönüştürme gerçekleştirilemiyorsa (geçerli basamak bulunamadıysa veya geçersiz bir taban belirtildiyse), değeri strSource
tarafından endptr
işaret edilen konumda depolanır.
strtod
strSource
aşağıdaki formlardan birinin dizesini işaret etmesini bekler:
[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
] [] NAN
[sequence
sign
]
İsteğe bağlı baştaki whitespace
boşluk ve sekme karakterlerinden oluşabilir ve bunlar yoksayılır.
sign
artı (+) veya eksi (-) olabilir.
digits
bir veya daha fazla ondalık basamaktır.
hexdigits
bir veya daha fazla onaltılık basamaktır.
radix
, varsayılan "C" yerel ayarında nokta (.) veya geçerli yerel ayar farklıysa veya belirtildiğinde locale
yerel ayara özgü değer olan radix noktası karakteridir.
A sequence
, alfasayısal veya alt çizgi karakterlerinden oluşan bir dizidir.
Hem ondalık hem de onaltılık sayı formlarında, radix noktası karakterinden önce hiç basamak görünmüyorsa, radix noktası karakterinden sonra en az bir basamak görünmelidir.
Ondalık formda ondalık basamakları, giriş harfi (e
veya E
) ve isteğe bağlı olarak imzalanan bir tamsayıdan oluşan bir üs takip edebilir.
Onaltılık formda, onaltılık basamaklar, giriş harfinden (p
veya P
) ve üssü 2'nin gücü olarak temsil eden isteğe bağlı olarak imzalanan ondalık tamsayıdan oluşan bir üs tarafından takip edilebilir.
Her iki biçimde de üstel parça veya radix noktası karakteri yoksa, dizedeki son basamaktan sonra gelen bir radix noktası karakteri varsayılır.
Hem hem NAN
de INF
formlarında büyük/küçük harf yoksayılır. Bu formlardan birine uymayan ilk karakter taramayı durdurur.
Bu işlevlerin UCRT sürümleri Fortran stili (d
veya D
) üslü harflerin dönüştürülmesi desteklenmez. Bu standart olmayan uzantı CRT'nin önceki sürümleri tarafından destekleniyordu ve kodunuz için hataya neden olan bir değişiklik olabilir. UCRT sürümleri, önceki sürümlerde desteklenmeyen INF
onaltılık dizeleri ve yuvarlak kopyalamayı ve NAN
değerleri destekler. Bu destek, kodunuzda hataya neden olan değişikliklere de neden olabilir. Örneğin, "0x1a
" dizesi önceki sürümlerde 0,0, UCRT sürümünde ise 26,0 olarak yorumlanabilir strtod
.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
strtod , _strtod_l |
C: <stdlib.h> C++: <cstdlib> veya <stdlib.h> |
wcstod , _wcstod_l |
C: <stdlib.h> veya <wchar.h> C++: <cstdlib> , <stdlib.h> veya <wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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
Ayrıca bkz.
Veri dönüştürme
Matematik ve kayan nokta desteği
Çok baytlı karakter dizilerinin yorumlanması
Yerel ayar
Sayısal değer işlevlerine dize
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