atof
, _atof_l
, _wtof
_wtof_l
Convertire una stringa in double.
Sintassi
double atof(
const char *str
);
double _atof_l(
const char *str,
_locale_t locale
);
double _wtof(
const wchar_t *str
);
double _wtof_l(
const wchar_t *str,
_locale_t locale
);
Parametri
str
Stringa da convertire.
locale
Impostazioni locali da usare.
Valore restituito
Ogni funzione restituisce il valore double
che viene prodotto interpretando i caratteri di input come numero. Il valore restituito è 0,0 se l'input non può essere convertito in un valore di tale tipo.
In tutti i casi fuori intervallo, errno
è impostato su ERANGE
. Se il parametro passato è NULL
, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno
su EINVAL
e restituiscono 0.
Osservazioni:
Queste funzioni convertono una stringa di caratteri in un valore a virgola mobile a precisione doppia.
La stringa di input è una sequenza di caratteri che può essere interpretata come valore numerico del tipo specificato. La funzione interrompe la lettura della stringa di input al primo carattere che non è in grado di riconoscere come parte di un numero. Questo carattere può essere il carattere null ('\0' o L'\0') che termina la stringa.
L'argomento str
per atof
e _wtof
ha il formato seguente:
[whitespace
] [] [digits
sign
] [.
digits
] [ {e
| E
}[sign
]digits
]
Un whitespace
oggetto è costituito da spazi o caratteri di tabulazione, che vengono ignorati; sign
è più (+) o meno (-) e digits
sono una o più cifre decimali. Se non viene visualizzata alcuna cifra prima del separatore decimale, è necessario che sia presente almeno una cifra dopo il separatore decimale. Le cifre decimali possono essere seguite da un esponente, costituito da una lettera introduttiva (e
o E
) e un intero decimale con segno facoltativo.
Le versioni UCRT di queste funzioni non supportano la conversione di lettere esponenti di tipo Fortran (d
o D
). Questa estensione non standard è supportata dalle versioni precedenti della libreria CRT e può rappresentare una modifica con impatto significativo per il codice esistente.
Le versioni di queste funzioni con il _l
suffisso sono identiche, ad eccezione del fatto che usano il locale
parametro passato anziché le impostazioni locali correnti.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Mapping di routine di testo generico
TCHAR.H routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tstof |
atof |
atof |
_wtof |
_ttof |
atof |
atof |
_wtof |
Requisiti
Routine | Intestazione obbligatoria |
---|---|
atof , _atof_l |
C: <math.h> o <stdlib.h> C++: <cstdlib> , <stdlib.h> o <cmath> <math.h> |
_wtof , _wtof_l |
C: <stdlib.h> o <wchar.h> C++: <cstdlib> , <stdlib.h> o <wchar.h> |
Esempio
Questo programma mostra come i numeri memorizzati come stringhe possono essere convertiti in valori numerici usando le funzioni atof
e _atof_l
.
// crt_atof.c
//
// This program shows how numbers stored as
// strings can be converted to numeric
// values using the atof and _atof_l functions.
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
int main(void)
{
char *str = NULL;
double value = 0;
_locale_t fr = _create_locale(LC_NUMERIC, "fr-FR");
// An example of the atof function
// using leading and training spaces.
str = " 3336402735171707160320 ";
value = atof(str);
printf("Function: atof(\"%s\") = %e\n", str, value);
// Another example of the atof function
// using the 'E' exponential formatting keyword.
str = "3.1412764583E210";
value = atof(str);
printf("Function: atof(\"%s\") = %e\n", str, value);
// An example of the atof and _atof_l functions
// using the 'e' exponential formatting keyword
// and showing different decimal point interpretations.
str = " -2,309e-25";
value = atof(str);
printf("Function: atof(\"%s\") = %e\n", str, value);
value = _atof_l(str, fr);
printf("Function: _atof_l(\"%s\", fr)) = %e\n", str, value);
}
Function: atof(" 3336402735171707160320 ") = 3.336403e+21
Function: atof("3.1412764583E210") = 3.141276e+210
Function: atof(" -2,309e-25") = -2.000000e+00
Function: _atof_l(" -2,309e-25", fr)) = -2.309000e-25
Vedi anche
Conversione dati
Supporto matematico e a virgola mobile
impostazioni locali
_ecvt
_fcvt
_gcvt
setlocale
, _wsetlocale
_atodbl
, _atodbl_l
, _atoldbl
, _atoldbl_l
, _atoflt
_atoflt_l