Aracılığıyla paylaş


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_VALdö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 strtoddöndürür:

  • Her iki işlev için de errno taşma veya yetersizlik oluşursa olarak ayarlanır ERANGE .
  • Geçersiz parametreler varsa, errno parametresi olarak ayarlanır EINVAL 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_errlistve _sys_nerr.

Açıklamalar

Her işlev giriş dizesini strSource öğesine doubledö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 strtodbir 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 strSourceradix 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 endptriş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 endptrişaret edilen konumda depolanır.

strtodstrSource 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 [sequencesign]

İ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