建議使用 Visual Studio 2017

atof、_atof_l、_wtof、_wtof_l

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

將字串轉換為 double。

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

str
要轉換的字串。

locale
要使用的地區設定。

每個函式會傳回double解譯為數字的輸入的字元所產生的值。 如果輸入不能轉換成該類型的值,則傳回值為 0.0。

所有超出範圍的情況下,在 errno 設為ERANGE。 如果傳入的參數是NULL、 無效參數處理常式叫用時,所述參數驗證。 如果允許繼續執行,這些函式會將errnoEINVAL,並傳回 0。

這些函數會將字元字串轉換為雙精確度浮點數的值。

輸入的字串是一串字元可以解譯為指定類型的數值。 函式會停止讀取在輸入的字串無法辨識為數字部分的第一個字元。 此字元可能會是 null 字元 ('\0' 或 L '\0') 結束的字串。

str引數atof_wtof具有下列格式︰

[whitespace] [sign] [digits] [.digits] [ {e | E }[sign]digits]

Awhitespace包含空格或定位字元,都會被忽略。sign是加號 (+) 或減號 (-); 以及digits是一或多個十進位數字。 如果沒有數字會出現在小數點前,至少一個必須出現在小數點之後。 十進位數字後面可能接著指數,簡介的字母所組成 (e,或E) 和選擇性帶正負號的十進位整數。

這些函式的 UCRT 版本不支援轉換的 Fortran 樣式 (dD) 指數的字母。 這個非標準擴充功能的較早版本的 CRT,支援的而且可能您的程式碼的重大變更。

這些有 _l 尾碼的函式版本是一樣的,不同之處在於會使用傳入的地區設定參數,而不使用目前的地區設定。

一般文字常式對應

TCHAR.H 常式未定義 _UNICODE 和 _MBCS_MBCS 已定義_UNICODE 已定義
_tstofatofatof_wtof
_ttofatofatof_wtof
Routine(s)必要的標頭
atof, _atof_lC: <math.h> or <stdlib.h> C++: <cstdlib>, <stdlib.h>, <cmath> or <math.h></math.h></stdlib.h></stdlib.h></math.h>
_wtof, _wtof_lC: <stdlib.h> or <wchar.h> C++: <cstdlib>, <stdlib.h> or <wchar.h></wchar.h></stdlib.h></wchar.h></stdlib.h>

此程式會顯示如何可以儲存為字串的數字轉換為數值資料,請使用atof_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  

資料轉換
浮點支援
地區設定
_ecvt
_fcvt
_gcvt
setlocale、 _wsetlocale
_atodbl、 _atodbl_l、 _atoldbl、 _atoldbl_l、 _atoflt、 _atoflt_l

顯示: