strtod, _strtod_l, wcstod, _wcstod_lstrtod, _strtod_l, wcstod, _wcstod_l

Converte una stringa di caratteri in un valore a precisione doppia.Convert strings to a double-precision value.

SintassiSyntax

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
);

ParametriParameters

strSourcestrSource
Stringa con terminazione Null da convertire.Null-terminated string to convert.

endptrendptr
Puntatore al carattere che interrompe la lettura.Pointer to character that stops scan.

localelocale
Impostazioni locali da usare.The locale to use.

Valore restituitoReturn Value

strtod restituisce il valore del numero a virgola mobile, tranne quando la rappresentazione potrebbe provocare un overflow, in cui la funzione case restituisce + /-HUGE_VAL.strtod returns the value of the floating-point number, except when the representation would cause an overflow, in which case the function returns +/-HUGE_VAL. Il segno di HUGE_VAL corrisponde al segno del valore non può essere rappresentato.The sign of HUGE_VAL matches the sign of the value that cannot be represented. strtod restituisce 0 se si verifica un underflow o può essere eseguita alcuna conversione.strtod returns 0 if no conversion can be performed or an underflow occurs.

wcstod restituisce i valori in modo analogo a strtod.wcstod returns values analogously to strtod. Per entrambe le funzioni errno è impostata su ERANGE se si verifica overflow o underflow e viene richiamato il gestore di parametri non validi, come descritto in convalida dei parametri.For both functions, errno is set to ERANGE if overflow or underflow occurs and the invalid parameter handler is invoked, as described in Parameter Validation. Per altre informazioni su questo e altri codici restituiti, vedere _doserrno, errno, _sys_errlist e _sys_nerr.See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on this and other return codes.

NoteRemarks

Ogni funzione converte la stringa di input strSource a un doppie.Each function converts the input string strSource to a double. Il strtod funzione converte strSource su un valore di precisione doppia.The strtod function converts strSource to a double-precision value. strtod interrompe la lettura della stringa strSource con il primo carattere non riconosciuto come parte di un numero.strtod stops reading the string strSource at the first character it cannot recognize as part of a number. Questo può essere il carattere Null di terminazione.This may be the terminating null character. wcstod è una versione a caratteri wide strtod; relativo strSource argomento è una stringa di caratteri "wide".wcstod is a wide-character version of strtod; its strSource argument is a wide-character string. A parte ciò, queste funzioni si comportano in modo identico.These functions behave identically otherwise.

Mapping di routine di testo genericoGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE e _MBCS non definiti_UNICODE & _MBCS not defined _MBCS definito_MBCS defined _UNICODE definito_UNICODE defined
tcstod_tcstod strtodstrtod strtodstrtod wcstodwcstod
tcstod_l_tcstod_l _strtod_l_strtod_l _strtod_l_strtod_l _wcstod_l_wcstod_l

Il LC_NUMERIC impostazione della categoria di impostazioni locali correnti determina il riconoscimento del carattere punto radice strSource.The LC_NUMERIC category setting of the current locale determines recognition of the radix point character in strSource. Per altre informazioni, vedere setlocale.For more information, see setlocale. Le funzioni senza il l suffisso usano le impostazioni locali; strtod_l è identica alla strtod_l ad eccezione del fatto che usano il delle impostazioni locali passate.The functions without the _l suffix use the current locale; _strtod_l is identical to _strtod_l except that they use the locale passed in instead. Per altre informazioni, vedere Locale.For more information, see Locale.

Se endptr non NULL, un puntatore al carattere che ha interrotto l'analisi viene archiviato in una posizione a cui puntata endptr.If endptr is not NULL, a pointer to the character that stopped the scan is stored at the location pointed to by endptr. Se è non possibile eseguire alcuna conversione sono state trovate le cifre non valide o è stata specificata una base non valida, il valore di strSource archiviato in una posizione a cui puntata endptr.If no conversion can be performed (no valid digits were found or an invalid base was specified), the value of strSource is stored at the location pointed to by endptr.

strtod prevede strSource in modo che punti a una stringa di uno dei formati seguenti:strtod expects strSource to point to a string of one of the following forms:

[whitespace] [sign] {cifre [radice cifre] | radice cifre} [{espulsione | espulsione} [sign] cifre] [whitespace] [sign] {0x | 0x} {cifre esadecimali [ radice cifre esadecimali] | radice cifre esadecimali} [{p | P} [sign] cifre esadecimali] [gli spazi vuoti] [sign] { INF | infinito} [gli spazi vuoti] [sign] NAN [sequenza][whitespace] [sign] {digits [radix digits] | radix digits} [{e | E} [sign] digits] [whitespace] [sign] {0x | 0X} {hexdigits [radix hexdigits] | radix hexdigits} [{p | P} [sign] hexdigits] [whitespace] [sign] {INF | INFINITY} [whitespace] [sign] NAN [sequence]

Il prefisso facoltativo whitespace può essere costituito da caratteri di spazio e tabulazione, che vengono ignorati; sign è un segno più (+) o meno (-). cifre sono uno o più cifre decimali cifre esadecimali sono uno o più cifre esadecimali. radice è il carattere punto radice, ovvero un punto (.) nelle impostazioni locali "C", valore predefinito o la specifica delle impostazioni locali valore diversa se le impostazioni locali correnti o quando internazionali è specificato; un sequenza è una sequenza di caratteri alfanumerici o caratteri di sottolineatura.The optional leading whitespace may consist of space and tab characters, which are ignored; sign is either plus (+) or minus (-); digits are one or more decimal digits; hexdigits are one or more hexadecimal digits; radix is the radix point character, either a period (.) in the default "C" locale, or the locale-specific value if the current locale is different or when locale is specified; a sequence is a sequence of alphanumeric or underscore characters. In formati di numero esadecimale sia decimale, se viene visualizzata nessuna cifra prima del carattere punto radice, almeno uno deve apparire dopo il carattere punto radice.In both decimal and hexadecimal number forms, if no digits appear before the radix point character, at least one must appear after the radix point character. In formato decimale, le cifre decimali possono essere seguite da un esponente è costituito da una lettera introduttiva (e o E) e un integer con segno facoltativo.In the decimal form, the decimal digits can be followed by an exponent, which consists of an introductory letter (e or E) and an optionally signed integer. In formato esadecimale, le cifre esadecimali possono essere seguite da un esponente è costituito da una lettera introduttiva (p o P) e un numero intero esadecimale facoltativamente con segno che rappresenta il esponente come potenza di 2.In the hexadecimal form, the hexadecimal digits can be followed by an exponent, which consists of an introductory letter (p or P) and an optionally signed hexadecimal integer that represents the exponent as a power of 2. In delle forme, se viene visualizzata una parte esponente né un carattere punto radice, un carattere punto radice equivale a seguire l'ultima cifra nella stringa.In either form, if neither an exponent part nor a radix point character appears, a radix point character is assumed to follow the last digit in the string. Case viene ignorato in entrambe le INF e NAN form.Case is ignored in both the INF and NAN forms. Il primo carattere non appartenente a uno di questi moduli arresta l'analisi.The first character that does not fit one of these forms stops the scan.

Le versioni della libreria UCRT di queste funzioni non supportano la conversione dello stile di Fortran (d o D) lettere esponente.The UCRT versions of these functions do not support conversion of Fortran-style (d or D) exponent letters. Questa estensione non standard è supportata dalle versioni precedenti della libreria CRT e può rappresentare una modifica con impatto significativo per il codice esistente.This non-standard extension was supported by earlier versions of the CRT, and may be a breaking change for your code. Le versioni della libreria UCRT supportano stringhe esadecimali e round trip dei valori INF e NAN non sono supportati nelle versioni precedenti.The UCRT versions support hexadecimal strings and round-tripping of INF and NAN values, which were not supported in earlier versions. Possono verificarsi modifiche di rilievo introdotte nel codice.This can also cause breaking changes in your code. Ad esempio, la stringa "0x1a" verrebbe interpretata dal strtod come 0,0 nelle versioni precedenti, ma come 26.0 nella versione libreria UCRT.For example, the string "0x1a" would be interpreted by strtod as 0.0 in previous versions, but as 26.0 in the UCRT version.

RequisitiRequirements

RoutineRoutine Intestazione obbligatoriaRequired header
strtod, strtod_lstrtod, _strtod_l C: <stdlib.h> C++: <cstdlib> o <stdlib.h>C: <stdlib.h> C++: <cstdlib> or <stdlib.h>
wcstod, wcstod_lwcstod, _wcstod_l C: <stdlib.h> o <wchar.h> C++: <cstdlib>, <stdlib.h> o <wchar.h>C: <stdlib.h> or <wchar.h> C++: <cstdlib>, <stdlib.h> or <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibilità.For additional compatibility information, see Compatibility.

EsempioExample

// 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 );
   }
}
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

Vedere ancheSee also

Conversione dei datiData Conversion
Supporto delle funzioni a virgola mobileFloating-Point Support
Interpretazione di sequenze di caratteri multibyteInterpretation of Multibyte-Character Sequences
Impostazioni localiLocale
Funzioni da stringa a valore numericoString to Numeric Value Functions
strtol, wcstol, _strtol_l, _wcstol_lstrtol, wcstol, _strtol_l, _wcstol_l
strtoul, _strtoul_l, wcstoul, _wcstoul_lstrtoul, _strtoul_l, wcstoul, _wcstoul_l
atof, _atof_l, _wtof, _wtof_latof, _atof_l, _wtof, _wtof_l
localeconvlocaleconv
_create_locale, _wcreate_locale_create_locale, _wcreate_locale
_free_locale_free_locale