其他分享
首页 > 其他分享> > C语言中的小数(float,double)

C语言中的小数(float,double)

作者:互联网

C语言同时支持以上两种形式的小数。但是在书写时C语言中的指数形式数学中的指数形式有所差异。

C语言中小数的指数形式为:

aEn 或 aen

指数形式的小数举例:

C语言中常用的小数有两种类型,分别是 float 或 double;float 称为单精度浮点型,double 称为双精度浮点型。

不像整数,小数没有那么多幺蛾子,小数的长度是固定的,

小数的输出

小数也可以使用 printf 函数输出,包括十进制形式和指数形式,它们对应的格式控制符分别是:

下面的代码演示了小数的表示以及输出:

运行结果:

a=3.020000e-01
b=128.100998
c=123.000000
d=1.126400E+05
e=0.007623
f=1.230024

对代码的说明:

1) %f 和 %lf 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入截断。

2) 将整数赋值给 float 变量时会变成小数。

3) 以指数形式输出小数时,输出结果为科学计数法;也就是说,尾数部分的取值为:0 ≤ 尾数 < 10。

4) b 的输出结果让人费解,才三位小数,为什么不能精确输出,而是输出一个近似值呢?这和小数在内存中的存储形式有关,很多简单的小数压根不能精确存储,所以也就不能精确输出,我们将在下节《小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)》中详细讲解。

另外,小数还有一种更加智能的输出方式,就是使用%g。%g 会对比小数的十进制形式和指数形式,以最短的方式来输出小数,让输出结果更加简练。所谓最短,就是输出结果占用最少的字符。

%g 使用示例:

运行结果:

a=1e-05
b=3e+07
c=12.84
d=1.22934

对各个小数的分析:

读者需要注意的两点是:

总之,%g 要以最短的方式来输出小数,并且小数部分表现很自然,不会强加零,比 %f 和 %e 更有弹性,这在大部分情况下是符合用户习惯的。

除了 %g,还有 %lg、%G、%lG:

数字的后缀

一个数字,是有默认类型的:对于整数,默认是 int 类型;对于小数,默认是 double 类型。

请看下面的例子:

100 和 294 这两个数字默认都是 int 类型的,将 100 赋值给 a,必须先从 int 类型转换为 long 类型,而将 294 赋值给 b 就不用转换了。

52.55 和 18.6 这两个数字默认都是 double 类型的,将 52.55 赋值给 x,必须先从 double 类型转换为 float 类型,而将 18.6 赋值给 y 就不用转换了。

如果不想让数字使用默认的类型,那么可以给数字加上后缀,手动指明类型:

请看下面的代码:

加上后缀,虽然数字的类型变了,但这并不意味着该数字只能赋值给指定的类型,它仍然能够赋值给其他的类型,只要进行了一下类型转换就可以了。

对于初学者,很少会用到数字的后缀,加不加往往没有什么区别,也不影响实际编程,但是既然学了C语言,还是要知道这个知识点的,万一看到别人的代码这么用了,而你却不明白怎么回事,那就尴尬了。

关于数据类型的转换,我们将在《C语言数据类型转换》一节中深入探讨。

小数和整数相互赋值

在C语言中,整数和小数之间可以相互赋值:

请看下面的代码:

运行结果:f = 251.000000, w = 19, x = 92, y = 0, z = -87

由于将小数赋值给整数类型时会“失真”,所以编译器一般会给出警告,让大家引起注意。

标签:输出,形式,double,float,C语言,类型,小数
来源: https://www.cnblogs.com/zjuhaohaoxuexi/p/16272831.html