atof
, _atof_l
, _wtof
, _wtof_l
Converta uma cadeia de caracteres em duplo.
Sintaxe
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
);
Parâmetros
str
Cadeia de caracteres a ser convertida.
locale
Localidade a usar.
Valor retornado
Cada função retorna o valor double
produzido interpretando os caracteres de entrada como um número. O valor retornado será 0,0 se a entrada não puder ser convertida em um valor desse tipo.
Em todos os casos de fora do intervalo, errno
é definido como ERANGE
. Se o parâmetro passado for NULL
, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno
como EINVAL
e retornarão 0.
Comentários
Essas funções convertem uma cadeia de caracteres em um valor de ponto flutuante de precisão dupla.
A cadeia de caracteres de entrada é uma sequência de caracteres que pode ser interpretada como um valor numérico do tipo especificado. A função para de ler a cadeia de caracteres de entrada no primeiro caractere que não pode ser reconhecida como parte de um número. Esse caractere pode ser o caractere nulo ('\0' ou L'\0') que encerra a cadeia de caracteres.
O argumento str
para atof
e _wtof
tem a seguinte forma:
[whitespace
] [sign
] [digits
] [] [digits
.
{E
| e
}[sign
]]digits
Um whitespace
consiste em caracteres de espaço ou tabulação, que são ignorados; sign
é um sinal de mais (+) ou menos (-); e digits
é composto por um ou mais dígitos decimais. Se nenhum dígito aparecer antes do ponto decimal, pelo menos um deverá aparecer após o ponto decimal. Os dígitos decimais podem ser seguidos por um expoente, que consiste em uma carta de apresentação (e
ou E
) e um inteiro decimal opcionalmente com sinal.
As versões UCRT dessas funções não dão suporte para a conversão de letras de expoente do estilo Fortran (d
ou D
). Essa extensão não padrão tinha suporte em versões anteriores do CRT e pode ser uma alteração significativa para seu código.
As versões dessas funções com o sufixo _l
são idênticas, com a exceção de que usam o parâmetro locale
passado em vez da localidade atual.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tstof |
atof |
atof |
_wtof |
_ttof |
atof |
atof |
_wtof |
Requisitos
Rotina(s) | Cabeçalho necessário |
---|---|
atof , _atof_l |
C: <math.h> ou <stdlib.h> C++: <cstdlib> , <stdlib.h> , <cmath> ou <math.h> |
_wtof , _wtof_l |
C: <stdlib.h> ou <wchar.h> C++: <cstdlib> , <stdlib.h> ou <wchar.h> |
Exemplo
Esse programa mostra como os números armazenados como cadeias de caracteres podem ser convertidos em valores numéricos usando as funções 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
Confira também
Conversão de dados
Suporte matemático e de ponto flutuante
Localidade
_ecvt
_fcvt
_gcvt
setlocale
, _wsetlocale
_atodbl
, _atodbl_l
, _atoldbl
, _atoldbl_l
, _atoflt
, , _atoflt_l