当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。