原创文章网站开发教程,安徽网站建设获客企业,wordpress qtranslate,装修网站建设公司小数分为整数部分和小数部分#xff0c;它们由点号.分隔#xff0c;例如 0.0、78.0、4.023、0.27、-927.148 -0.57 等都是合法的小数#xff0c;这是最常见的小数形式#xff0c;我们将它称为十进制形式。
此外#xff0c;小数也可以采用指数形式#xff0c;例如 7.2510…小数分为整数部分和小数部分它们由点号.分隔例如 0.0、78.0、4.023、0.27、-927.148 -0.57 等都是合法的小数这是最常见的小数形式我们将它称为十进制形式。
此外小数也可以采用指数形式例如 7.25×102、0.0368×105、100.22×10-2、-27.36×10-3 等。任何小数都可以用指数形式来表示。
C语言同时支持以上两种形式的小数。但是在书写时C语言中的指数形式和数学中的指数形式有所差异。
C语言中小数的指数形式为
aEn 或 aena 为尾数部分是一个十进制数n 为指数部分是一个十进制整数E或e是固定的字符用于分割尾数部分和指数部分。整个表达式等价于 a×10n。
指数形式的小数举例 2.1E5 2.1×105其中 2.1 是尾数5 是指数。3.7E-2 3.7×10-2其中 3.7 是尾数-2 是指数。0.5E7 0.5×107其中 0.5 是尾数7 是指数。C语言中常用的小数有两种类型分别是 float 或 doublefloat 称为单精度浮点型double 称为双精度浮点型。
小数的长度是固定的float 始终占用4个字节double 始终占用8个字节。
小数的输出
小数也可以使用 printf 函数输出包括十进制形式和指数形式它们对应的格式控制符分别是 %f 以十进制形式输出 float 类型 %lf 以十进制形式输出 double 类型%e 以指数形式输出 float 类型输出结果中的 e 小写%E 以指数形式输出 float 类型输出结果中的 E 大写%le 以指数形式输出 double 类型输出结果中的 e 小写%lE 以指数形式输出 double 类型输出结果中的 E 大写。小数的表示以及输出
#include stdio.h
#include stdlib.h
int main()
{float a 0.302;float b 128.101;double c 123;float d 112.64E3;double e 0.7623e-2;float f 1.23002398;printf(a%e \nb%f \nc%lf \nd%lE \ne%lf \nf%f\n, a, b, c, d, e, f);return 0;
}运行结果
a3.020000e-01
b128.100998
c123.000000
d1.126400E05
e0.007623
f1.230024程序解说 %f 和 %lf 默认保留六位小数不足六位以 0 补齐超过六位按四舍五入截断。 将整数赋值给 float 变量时会变成小数。 以指数形式输出小数时输出结果为科学计数法也就是说尾数部分的取值为0 ≤ 尾数 10。 b 的输出结果让人费解才三位小数为什么不能精确输出而是输出一个近似值呢这和小数在内存中的存储形式有关很多简单的小数压根不能精确存储所以也就不能精确输出。
另外小数还有一种更加智能的输出方式就是使用%g。%g 会对比小数的十进制形式和指数形式以最短的方式来输出小数让输出结果更加简练。所谓最短就是输出结果占用最少的字符。
%g 使用示例
#include stdio.h
#include stdlib.h
int main()
{float a 0.00001;float b 30000000;float c 12.84;float d 1.229338455;printf(a%g \nb%g \nc%g \nd%g\n, a, b, c, d);return 0;
}运行结果
a1e-05
b3e07
c12.84
d1.22934对各个小数的分析 1 . a 的十进制形式是 0.00001占用七个字符的位置a 的指数形式是 1e-05占用五个字符的位置指数形式较短所以以指数的形式输出。
2 . b 的十进制形式是 30000000占用八个字符的位置b 的指数形式是 3e07占用五个字符的位置指数形式较短所以以指数的形式输出。
3 . c 的十进制形式是 12.84占用五个字符的位置c 的指数形式是 1.284e01占用九个字符的位置十进制形式较短所以以十进制的形式输出。
4 . d 的十进制形式是 1.22934占用七个字符的位置d 的指数形式是 1.22934e00占用十一个字符的位置十进制形式较短所以以十进制的形式输出。
我们需要特别注意 %g 默认最多保留六位有效数字包括整数部分和小数部分%f 和 %e 默认保留六位小数只包括小数部分。%g 不会在最后强加 0 来凑够有效数字的位数而 %f 和 %e 会在最后强加 0 来凑够小数部分的位数。总之%g 要以最短的方式来输出小数并且小数部分表现很自然不会强加零比 %f 和 %e 更有弹性。
除了 %g还有 %lg、%G、%lG %g 和 %lg 分别用来输出 float 类型和 double 类型并且当以指数形式输出时e小写。 %G 和 %lG 也分别用来输出 float 类型和 double 类型只是当以指数形式输出时E大写。
数字的后缀
一个数字是有默认类型的对于整数默认是 int 类型对于小数默认是 double 类型。
示例
long a 100;
int b 294;float x 52.55;
double y 18.6;100 和 294 这两个数字默认都是 int 类型的将 100 赋值给 a必须先从 int 类型转换为 long 类型而将 294 赋值给 b 就不用转换了。
52.55 和 18.6 这两个数字默认都是 double 类型的将 52.55 赋值给 x必须先从 double 类型转换为 float 类型而将 18.6 赋值给 y 就不用转换了。
如果不想让数字使用默认的类型那么可以给数字加上后缀手动指明类型 在整数后面紧跟 l 或者 L不区分大小写表明该数字是 long 类型在小数后面紧跟 f 或者 F不区分大小写表明该数字是 float 类型。请看下面的代码
long a 100l;
int b 294;
short c 32L;float x 52.55f;
double y 18.6F;
float z 0.02;加上后缀虽然数字的类型变了但这并不意味着该数字只能赋值给指定的类型它仍然能够赋值给其他的类型只要进行了一下类型转换就可以了。
小数和整数相互赋值
在C语言中整数和小数之间可以相互赋值 将一个整数赋值给小数类型在小数点后面加 0 就可以加几个都无所谓。将一个小数赋值给整数类型就得把小数部分丢掉只能取整数部分这会改变数字本来的值。注意是直接丢掉小数部分而不是按照四舍五入取近似值。请看下面的代码
#include stdio.h
int main(){float f 251;int w 19.427;int x 92.78;int y 0.52;int z -87.27;printf(f %f, w %d, x %d, y %d, z %d\n, f, w, x, y, z);return 0;
}运行结果
f 251.000000, w 19, x 92, y 0, z -87由于将小数赋值给整数类型时会“失真”所以编译器一般会给出警告让大家引起注意。
如果感觉不错的话请点赞哟