`
emowuyi
  • 浏览: 1477900 次
文章分类
社区版块
存档分类
最新评论

自己动手写C语言格式化输出函数(三)

 
阅读更多

上接《自己动手写C语言格式化输出函数(二)》、《自己动手写C语言格式化输出函数(一)》。

八、格式化浮点数(有关浮点数的数据定义和底层的数据转换函数见自己动手写C语言浮点数转换字符串函数》一文)。


在sprintfA函数中,浮点数的格式化是最复杂的。浮点数有2种表现形式,即小数形式和指数形式,分别用"%f"和"%e"格式表示,另外还有个"%g"格式,这是个自动格式,即sprintfA通过分析后,自行决定采用哪种形式。

在以小数形式的格式化中,对数据的格式化有个极限长度,不然,在扩展精度浮点数下,有些浮点数长度可达到近5000位,即使是双精度浮点数,最高长度也达300多。在printf系列函数中,这个极限长度随编译器不同而不同,有的将这个值定为100,有的定为单精度浮点数的最大表现形式,即38等,我在这里把它定为了正负45位,当数据超过这个极限长度,就自动采用指数形式来格式化数据了。

在介绍sprintfA数据定义时就说过,由于sprintfA的可变参数部分没有参数原型供编译器对照,所以在输入浮点数参数时要注意与格式字符串中对应的浮点数精度匹配,32位编译器的浮点数缺省精度是64位双精度数,即使你给的参数变量是个单精度数,也会扩展为双精度数,如果参数变量是long double,而你使用的编译器支持80位扩展精度浮点数时,传递的是80位扩展精度数,否则也是双精度数,如果你给出一个整数,编译器是不会自动转换的。如果你在参数位置输入的是常数就更应该注意了,123,123L,123.0f,123.0,123.0L这几种常数形式是不同的(L也可是小写),分别是整数,长整数,单精度浮点数,双精度浮点数,扩展精度浮点数(如果编译器不支持,也是双精度数)。所以,在32位及以上编译器中格式%f和%lf是等同的,自然,在不支持扩展精度浮点数的编译器中,%llf(%Lf)也等同于%f。

本文格式化浮点数时用到的FloatResolve函数以及有关数据定义见自己动手写C语言浮点数转换字符串函数

有关sprintfA函数的介绍就全部完毕。文章代码没进行严格的测试。

声明:本文代码主要供学习使用,如作其它用途,出问题慨不负责。

水平有限,错误在所难免,欢迎指正和指导。邮箱地址:maozefa@hotmail.com


分享到:
评论

相关推荐

    C语言格式化读写函数

    C语言格式化读写函数,与另一个资源相关连,可同时下载看看。

    C语言格式化输出详细说明

    C语言格式化输出详细说明,介绍了printf 一类函数格式化输出的格式控制说明。

    C语言格式化读取函数

    格式化读取函数。C语言。 自定义格式。

    C语言格式化输入输出函数详解

    2、格式化控制字符串用于指定输出格式,它有三种形式: 1、格式说明符:规定了相应输出表列内容的输出格式,以%打头,如%d、%o等 2、转义字符:用来输出转义字符所代表的控制代码或者特殊字符,比如常用的‘\n’、...

    C语言输出格式总结.

    printf(格式控制,输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: (1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息: ①格式说明:由“%”和格式字符组成,它的作用...

    C语言IO--printf右对齐补零

    C语言IO--printf右对齐补零,包括标准输入输出函数、格式化输入输出函数、格式化规定符、一些特殊规定字符等

    详解C语言中printf输出的相关函数

    C语言printf()函数:格式化输出函数 printf()函数是最常用的格式化输出函数,其原型为: int printf( char * format, ... ); printf()会根据参数 format 字符串来转换并格式化数据,然后将结果输出到标准输出...

    深入分析C语言中格式化输入函数scanf的使用.pdf

    深入分析C语言中格式化输入函数scanf的使用.pdf

    C语言 格式化读写文件详解

    fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是键盘和显示器,而是磁盘文件。 这两个函数的原型为: int ...

    计算机专题20100311期——C语言格式化IO详解

    函数族 用途 可用于所有的流 只用于stdin和stdout 内存中的字符串 scanf 格式化输入 fscanf scanf sscanf printf 格式化输出 fprintf printf sprintf

    C语言入门基础,适用于初学者

    3.3 C语言格式化输出函数printf实例详解 15 3.4 C语言格式化输入函数scanf实例详解 17 4.1 C语言赋值运算符实例讲解 19 4.2 C语言算数运算符实例讲解 21 4.3 C语言sizeof运算符 23 4.4 C语言逻辑运算符实例讲解 23 ...

    C语言源代码格式化 完工 V1.04 20120226 1946.7z

    C语言源代码格式化。 处理文件夹。 PLT2KMLX14解决最后一行的问题 20110721 0931.7z WPT2KMLx4解决空行末行 20110721 0948.7z WPTPLT2KMLx12PLTWPT初步 20110721 1006.7z OZI格式的轨迹文件转KML格式的轨迹文件...

    C语言常用调试用函数和宏定义头文件,便捷打印参数信息、输出日志

    C语言常用的调试用函数,例如打印参数名和数值、记录日志文件、格式化打印一维和二维数组、二进制信息等。头文件包含:1、常用数据类型别名;2、重定向printf到日志文件,打印信息可选包含行号,便于调试信息追溯;3...

    谭浩强C语言设计第三版.pdf

     2.4.1 格式化输出函数pIintf()  2.4.2 格式化输入函数scanf()  2.4.3 字符输入/输出函数getchar()与putchar()  习题二 第3章 C语言程序的流程控制  3.1 算法  3.1.1 算法的组成要素与基本性质  3.1.2 算法...

    C语言全套视频教程 视频.txt

    7) C语言之格式化输出 8) C语言之格式化输入 9) C语言之格式化输入输出整理 10) C语言之基本运算符 11) C语言之其他运算符 12) C语言之表达式和语句 循环语句 13) C语言之while循环语句 14) C语言之do-while循环...

    格式化输出

    C语言中关于某些特殊符号格式化的输出,打印函数的参数

    C语言参数个数可变函数详解

    *printf()/*scanf()系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int argc,char*argv[])算不算呢,与其说main()也是一个可变参数函数,倒不如说它是exec*()经过封装后的...

Global site tag (gtag.js) - Google Analytics