當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ atof()用法及代碼示例


C++ 中的atof() 函數將字符串的內容解釋為浮點數並將其值作為雙精度值返回。

atof()原型

double atof(const char* str);

它在<cstdlib> 頭文件中定義。

參數:

  • str- 具有浮點數表示的字符串。

返回:

atof() 函數返回:

  • 一個雙精度值(從字符串轉換而來)。
  • 如果無法執行有效轉換,則為 0.0。

如果轉換後的值超出範圍,則會導致未定義的行為。

示例 1:atof() 函數如何工作?

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	char numberString[] = "-32.40"; 
	double numberInDouble;
	cout << "Number in  String = " << numberString << endl;

	numberInDouble = atof(numberString);
	cout << "Number in Double = " << numberInDouble;
	
	return 0;
}

運行程序時,輸出將是:

Number in  String = -32.40
Number in Double = -32.4

atof() 函數的有效浮點值包含可選的 + 或 - 符號,後跟以下集合之一:

  • 對於十進製浮點值:
    • 一組十進製數字(0-9), 可選地包含一個小數點 (.)。例如:9.056、-0.013 等。
    • 可選的 index 部分(eE)後跟可選的 + 或 - 符號和非空的十進製數字序列。例如:1.23455e+009、5.23e-018等。
  • 對於十六進製浮點值:
    • 0x0X 開頭的字符串,後跟一個非空的十六進製數字序列,可以選擇包含小數點 (.)。例如:0xf1b、-0xb1b.51 等。
    • 可選的 index 部分(pP)後跟可選的 + 或 - 符號和非空的十六進製數字序列。例如:0x51c.23p5、-0x2a.3p-3 等。
  • Infinity:
    • INFINFINITY(忽略大小寫)。例如:-iNf、INfINiT 等。
  • NaN(不是數字):
    • NANNANsequence(忽略大小寫),其中 sequence 是僅由字母數字字符或下劃線 (_) 組成的字符序列。結果是安靜的 NaN。例如:Nan、NaN12 等。

示例 2:atof() 如何與 index 和十六進製一起使用?

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{

	cout << "-44.01e-3" << " to Double = " << atof("-44.01e-0") << endl;
	cout << "-44.01e-3" << " to Double = " << atof("-44.01e-3") << endl;
	
	cout << "0xf1bc" << " to Double = " << atof("0xf1bc") << endl;
	cout << "0xf1bc.51" << " to Double = " << atof("0xf1bc.51") << endl;
	
	return 0;
}

運行程序時,輸出將是:

-44.01e-3 to Double = -44.01
-44.01e-3 to Double = -0.04401
0xf1bc to Double = 61884
0xf1bc.51 to Double = 61884.3

示例 3:INFINITY 和 NaN 的 atof 案例

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	cout << "INFINITY" << " to Double = " << atof("INFINITY") << endl;
	cout << "Inf" << " to Double = " << atof("Inf") << endl;

	cout << "Nan" << " to Double = " << atof("Nan") << endl;
	cout << "NAN" << " to Double = " << atof("NAN") << endl;
	
	return 0;
}

運行程序時,輸出將是:

INFINITY to Double = inf
Inf to Double = inf
Nan to Double = nan
NAN to Double = nan

通常,atof() 函數的有效浮點參數具有以下形式:

[whitespace] [- | +] [digits] [.digits] [ {e | E }[- | +]digits]

atof() 函數會忽略所有前導空白字符,直到找到主要的非空白字符。

然後,從這個字符開始,盡可能多的字符組成一個有效的浮點表示並將它們轉換為浮點值。在最後一個有效字符之後字符串的剩餘部分將被忽略並且對結果沒有影響。

示例 4:帶有空格和尾隨字符的 atof() 函數

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    cout << "25.5" << " to Double = " << atof("  25.5") << endl;
    cout << "25.5    " << " to Double = " << atof("  25.5   ") << endl;
    cout << "25.5abcd" << " to Double = " << atof("25.5abcd") << endl;

    // Returns 0 because of invalid conversion
    cout << "abcd25.5" << " to Double = " << atof("abcd25.5") << endl;

    // Rules for whitespace and trailing character also apply for infinity and Nan
    cout << "INFINITYabcd" << " to Double = " << atof("INFINITYabcd") << endl;
    cout << "INFINITY" << " to Double = " << atof("  INFINITY") << endl;
    cout << "Nanlll" << " to Double = " << atof("Nanlll") << endl;

    return 0;
}

運行程序時,輸出將是:

25.5 to Double = 25.5
25.5     to Double = 25.5
25.5abcd to Double = 25.5
abcd25.5 to Double = 0
INFINITYabcd to Double = inf
INFINITY to Double = inf
Nanlll to Double = nan

相關用法


注:本文由純淨天空篩選整理自 C++ atof()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。