atof() - 字符串转double类型

news/2025/9/21 11:21:37/文章来源:https://www.cnblogs.com/happykino/p/19103274

引言

atof() 函数是 C 标准库中用于将字符串(ASCII 字符串)转换为双精度浮点数(double 类型) 的函数,其名称来源于 “ASCII to Float” 的缩写,主要用于处理包含小数或科学计数法的字符串。

一、基本信息

函数原型

#include <stdlib.h>  // 必须包含的头文件
double atof(const char *str);
/*
参数 str:指向待转换的字符串的指针(字符串需符合浮点数格式,如 "3.14"、"-123.45"、"1e3" 等)。
返回值:转换后的 double 类型浮点数;若转换失败(如字符串无有效浮点数),则返回 0.0。
*/

核心功能

将符合浮点数格式的字符串转换为对应的 double 数值,支持:

  • 整数部分(如 "123")、小数部分(如 "123.45");
  • 正负号(如 "-123.45"、"+67.89");
  • 科学计数法(如 "1e3" 表示 1×10³,"2.5e-2" 表示 2.5×10⁻²);
  • 忽略字符串开头的空白字符(空格、制表符 \t、换行符 \n 等)。

二、转换示例

输入字符串 转换结果(double) 说明
"3.14" 3.14 基本小数格式
"-123.45" -123.45 带负号的小数
" +67.89abc" 67.89 忽略开头空白和正号,遇到 'a' 停止
"123" 123.0 整数自动转换为浮点数
"1e3" 1000.0 科学计数法(1×10³)
"2.5e-2" 0.025 带小数的科学计数法(2.5×10⁻²)
"abc1.23" 0.0 非数字开头,转换失败
""(空字符串) 0.0 无有效字符,转换失败

三、代码示例

#include <stdio.h>
#include <stdlib.h>  // 包含 atof() 的头文件int main() 
{char str1[] = "3.14159";       // 基本小数char str2[] = "-123.456";      // 带负号的小数char str3[] = "  +78.9e2";     // 带空白、正号和科学计数法char str4[] = "abc0.123";      // 非数字开头char str5[] = "123.45abc";     // 数字后带非数字字符printf("atof(\"%s\") = %.5f\n", str1, atof(str1));  // 3.14159printf("atof(\"%s\") = %.3f\n", str2, atof(str2));  // -123.456printf("atof(\"%s\") = %.1f\n", str3, atof(str3));  // 7890.0(78.9×10²)printf("atof(\"%s\") = %.3f\n", str4, atof(str4));  // 0.000(转换失败)printf("atof(\"%s\") = %.2f\n", str5, atof(str5));  // 123.45(遇到 'a' 停止)return 0;
}

四、与 strtod() 的对比

atof() 是 strtod() 的简化版本,两者的核心差异如下:

特性 atof(const char *str) strtod(const char *str, char **endptr)
错误处理 无(失败返回 0.0,无法区分有效 0.0) 可通过 endptr 判断转换终止位置
数值范围 支持 double,溢出未定义 支持 double,溢出返回 HUGE_VAL 等
格式支持 仅十进制浮点数(含科学计数法) 支持十进制、十六进制浮点数(如 "0x1.2p3")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:还在为第三方包 bug 头疼?patch-package 让你轻松打补丁!

完整教程:还在为第三方包 bug 头疼?patch-package 让你轻松打补丁!pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

Kubernetes(k8s)高可用性集群的构建

1. 规划集群架构控制平面节点(Masters) :至少部署3个控制平面节点以实现高可用性。 工作节点(Workers) :数量根据负载需求决定。 负载均衡器:至少1个,用于分发流量至多个控制平面节点。2. 前期环境准备确保所有…

深入解析:解密llama.cpp:从Prompt到Response的完整技术流程剖析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

在CentOS环境下升级GCC编译器

CentOS作为一个以稳定性和安全性著称的Linux发行版,它默认包含的软件包和工具通常不是最新版本的,这样做的好处是可以提供一个测试时间更长、更加稳定可靠的系统环境。然而,有时候我们需要用到最新版本的GCC编译器来…

详细介绍:深圳比斯特|电池组PACK自动化生产线厂家概述

详细介绍:深圳比斯特|电池组PACK自动化生产线厂家概述pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

Chapter 4 Shapes and Texts

# [[0. 0. 0 # img = np.zeros(shape=(512, 512)) # [[[0 0 0] img = np.zeros(shape=(512, 512, 3), dtype=np.uint8) # print(img)# Blue 这里还是先 Height,然后是 Width,如果只写255,就是白色了 img[:] = 255,0…

手动清除Ubuntu系统中的内存缓存

在Linux系统中,如Ubuntu,内核会自动管理内存,包含缓存(cache)和缓冲区(buffers)去提升系统性能。操作系统通常会将部分内存空间用作缓存来临时存储文件数据,这样当文件再次被访问时能够加快读取速度。然而,在…

Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200% - 教程

Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200% - 教程2025-09-21 11:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto …

2025年9月底总结

2025年9月底总结这是一次临时起意的总结。工作 平淡的进行。 没太多特别的。 最近突然对内部的开源市场感兴趣,写了个简单的小脚本,看看能不能帮一些同事解决实际上的问题,天天都看下下载量,还是挺有成就感的。还有…

技术文章

该篇文章无摘要WEBCAST: BHIS网络直播世界巡演 - 亚利桑那站直播 John Strand// 作为BHIS网络直播世界巡演的一部分,我们在凤凰城新开放的亚利桑那网络战靶场(AZCWR)举办了现场活动。 查看活动详情和照片: https:/…

深入解析:AutoGPT原理与实践:构建能“自主完成任务”的AI智能体

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

dolphindb vscode更改连接配置的操作步骤 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

插值相关

通常的,我们被给到一个函数在一些点上的值,我们可以用高斯消元在 \(O(n^3)\) 的时间复杂度内求出对应的多项式 当我们只被要求求出其中的的一个点时,我们可以使用插值这个工具在 \(O(n^2)\) 的时间复杂度之内求解。…

密码学学习记录(三)

密码学学习记录(三)《图解密码技术》[1]学习记录密码算法可以分为分组密码(block cipher)和流密码。 分组密码只能加密固定长度的明文,因为不知道明文的长度,所以一般需要对分组密码进行迭代,而迭代的方法就被称…

详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别

scheduleAtFixedRate:是以period为间隔来执行任务的,如果任务执行时间小于period,则上次任务执行完成后会间隔period后再去执行下一次任务;但如果任务执行时间大于period,则上次任务执行完毕后会不间隔的立即开始…

模拟输入的过程

模拟输入的过程一、ADC 是什么? ADC 的全称是 Analog-to-Digital Converter,中文叫模数转换器。 它的作用就像一位翻译官,负责将现实世界中连续的模拟信号“翻译”成计算机(MCU)能够理解和处理的离散的数字信号。…

基于Redisson和自定义注解的分布式锁实现策略

要实现基于Redisson和自定义注解的分布式锁策略,我们需首先理解Redisson。Redisson是一个基于Redis的高级Java对象映射库,其内部封装了分布式数据结构和同步服务,使得在分布式环境中操作Redis变得非常方便。 以下是…

CCPC2025网络赛 游记

队友超快砍完签到,我全场挂机没作用,3t寄了。省流 队友超快砍完签到,我全场挂机没作用,3t寄了。9.20 内含剧透,请vp后再来。 赛前 比赛开始前登录机器,发现我点不进去比赛页面,一顿查询之后发现队长机是叶神,不…

深入解析:Python进阶第三方库之Numpy

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

17.生成器和推导式 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …