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

ParametriParameters

nptrnptr
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 causerebbe 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 che non può essere rappresentato.The sign of HUGE_VAL matches the sign of the value that cannot be represented. strtod restituisce 0 se è non possibile eseguire alcuna conversione oppure se si verifica un overflow.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 viene impostato su ERANGE in caso di 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 nptr per un double.Each function converts the input string nptr to a double. Il strtod funzione converte nptr su un valore a precisione doppia.The strtod function converts nptr to a double-precision value. strtod Interrompe la lettura della stringa nptr con il primo carattere non riconosciuto come parte di un numero.strtod stops reading the string nptr 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 di strtod; relativo nptr argomento è una stringa di caratteri "wide".wcstod is a wide-character version of strtod; its nptr 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 strtod strtod wcstod
_tcstod_l _strtod_l _strtod_l _wcstod_l

Il LC_NUMERIC impostazione della categoria di impostazioni locali correnti determina il riconoscimento del carattere punto radice nptr.The LC_NUMERIC category setting of the current locale determines recognition of the radix point character in nptr. Per altre informazioni, vedere setlocale.For more information, see setlocale. Le funzioni senza il _l suffisso usano le impostazioni locali; _strtod_l è identico a _strtod_l ad eccezione del fatto che usano il internazionali 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 è 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 è stato specificato un base non valido, il valore di nptr è 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 nptr is stored at the location pointed to by endptr.

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

[whitespace] [sign] {cifre [radice cifre] | radice cifre} [{e | E} [sign] cifre][whitespace] [sign] {digits [radix digits] | radix digits} [{e | E} [sign] digits]
[whitespace] [sign] {0x | 0x} {cifre esadecimali [radice cifre esadecimali] | radice cifre esadecimali} [{p | P} [sign] cifre esadecimali][whitespace] [sign] {0x | 0X} {hexdigits [radix hexdigits] | radix hexdigits} [{p | P} [sign] hexdigits]
[whitespace] [sign] {INF | Infinito}[whitespace] [sign] {INF | INFINITY}
[whitespace] [sign] NAN [sequenza][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 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

Data Conversion (Conversione dei dati)Data Conversion
Floating-Point Support (Supporto delle funzioni a virgola mobile)Floating-Point Support
Interpretazione di sequenze di caratteri multibyte Interpretation of Multibyte-Character Sequences
Locale (Impostazioni locali)Locale
Funzioni da stringa a valore numerico String to Numeric Value Functions
strtol, wcstol, _strtol_l, _wcstol_l strtol, wcstol, _strtol_l, _wcstol_l
strtoul, _strtoul_l, wcstoul, _wcstoul_l strtoul, _strtoul_l, wcstoul, _wcstoul_l
atof, _atof_l, _wtof, _wtof_l atof, _atof_l, _wtof, _wtof_l
localeconv localeconv
_create_locale, _wcreate_locale _create_locale, _wcreate_locale
_free_locale_free_locale