strtod, _strtod_l, wcstod, _wcstod_l
Převod řetězce na hodnotu Dvojitá přesnost.
double strtod(
const char *nptr,
char **endptr
);
double _strtod_l(
const char *nptr,
char **endptr,
_locale_t locale
);
double wcstod(
const wchar_t *nptr,
wchar_t **endptr
);
double wcstod_l(
const wchar_t *nptr,
wchar_t **endptr,
_locale_t locale
);
Parametry
nptr
Řetězec zakončený null pro převod.endptr
Ukazatel na znak, který zastaví skenování.locale
Použité národní prostředí.
Vrácená hodnota
strtod vrátí číslo s plovoucí desetinnou čárkou, kromě případů, kdy reprezentace by mohla způsobit přetečení. V takovém případě funkce vrací hodnotu +/–HUGE_VAL.Znaménko HUGE_VAL odpovídá znaménku hodnoty, kterou nelze vyjádřit.strtod vrátí hodnotu 0, pokud převod lze provést nebo dochází k podtečení.
wcstod vrátí hodnoty analogicky k strtod.Pro obě funkce je errno nastavena na ERANGE v případě, že dojde k přetečení nebo podtečení a vyvolá se neplatná obslužná rutina parametru, jak je popsáno v tématu Ověření parametru.
Viz _doserrno, kód chyby, _sys_errlist a _sys_nerr Další informace o této a dalších návratové kódy.
Poznámky
Každá funkce převede vstupní řetězec nptr na double.strtod Funkce převede nptr na hodnotu Dvojitá přesnost.strtod zastaví čtení řetězce nptr u prvního znaku, který nebude rozpoznán jako část čísla.Může to být ukončující znak null.wcstod je širokoznaká verze strtod; její parametr nptr je širokoznaký řetězec.Tyto funkce se chovají jinak identicky.
Rutinní mapování obecného textu
Rutina TCHAR.H |
_UNICODE & _MBCS není definováno |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
_tcstod |
strtod |
strtod |
wcstod |
_tcstod_l |
_strtod_l |
_strtod_l |
_wcstod_l |
LC_NUMERIC Kategorie nastavení pro aktuální národní prostředí určuje rozpoznávání znaků radix v nptr*;* Další informace naleznete v tématu setlocale.Funkce bez _l příponu použít aktuální národní prostředí; _strtod_l je totožný s _strtod_l s tím rozdílem, že používají místo něho předán národní prostředí.Další informace naleznete v tématu Národní prostředí.
Pokud endptr není NULL, ukazatel znaku, který zastavil skenování, je uložen v umístění, na které ukazuje endptr.Pokud žádné převody nemohou být provedeny (nebyly nalezeny žádné platné číslice nebo byla zadána neplatná základna), hodnota nptr je uložena na adrese, na kterou odkazuje endptr.
strtod očekává, že nptr ukáže na řetězec v následujícím formátu:
[whitespace] [sign] [digits] [.digits] [ {d | D | e | E}[sign]digits]
whitespace se může skládat ze znaků mezera a tabulátor, které jsou ignorovány; sign je plus (+) nebo minus (–); a digits je jedna nebo více desítkových číslic.Žádné se před číselnou soustavou znaků nenachází žádná číslice, poslední číslice se musí nacházet za číselnou soustavou znaků.Může být následován desítkami číslic exponentu, které se skládají z úvodního písmene (d, D, e nebo E) a volitelného znaménka.Pokud se nezobrazí část exponenty ani číselná soustava znaků, předpokládá se, že číselná soustava znaků postupuje podle poslední číslice v řetězci.První znak, který neodpovídá tomuto formuláři, zastaví prohledávání.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
strtod, _strtod_l |
<stdlib.h> |
wcstod, _wcstod_l |
<stdlib.h> nebo <wchar.h> |
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
Příklad
// 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 );
}
}
Ekvivalent v rozhraní .NET Framework
Viz také
Referenční dokumentace
Podpora plovoucí desetinné čárky
Výklad sekvencí vícebajtových znaků
Funkce řetězců na numerické hodnoty
strtol, wcstol, _strtol_l, _wcstol_l
strtoul, _strtoul_l, wcstoul, _wcstoul_l