小数分为整数部分和小数部分,它们由点号.分隔,例如 0.0、75.0、4.023、0.27、-937.198 -0.27 等都是合法的小数,这是最常见的小数形式,我们将它称为十进制形式
此外,小数也可以采用指数形式,例如 7.25×10^2、0.0368×10^5、100.22×10^-2、-27.36×10^-3 等。任何小数都可以用指数形式来表示
C语言同时支持以上两种形式的小数。但是在书写时,C语言中的指数形式和数学中的指数形式有所差异。
C语言中小数的指数形式为:
aEn 或 aen
a 为尾数部分,是一个十进制数;n 为指数部分,是一个十进制整数;E或e是固定的字符,用于分割尾数部分和指数部分。整个表达式等价于 a×10n。
指数形式的小数举例:
- 2.1E5 = 2.1×10^5,其中 2.1 是尾数,5 是指数。
- 3.7E-2 = 3.7×10^-2,其中 3.7 是尾数,-2 是指数。
- 0.5E7 = 0.5×10^7,其中 0.5 是尾数,7 是指数。
C语言中常用的小数有两种类型,分别是 float 或 double;float 称为单精度浮点型占用4个字节,double 称为双精度浮点型占用8个字节
小数的输出
小数也可以使用 printf 函数输出,包括十进制形式和指数形式,它们对应的格式控制符分别是:
- %f 以十进制形式输出 float 类型;
- %lf 以十进制形式输出 double 类型;
- %e 以指数形式输出 float 类型,输出结果中的 e 小写;
- %E 以指数形式输出 float 类型,输出结果中的 E 大写;
- %le 以指数形式输出 double 类型,输出结果中的 e 小写;
- %lE 以指数形式输出 double 类型,输出结果中的 E 大写;
-
%g 会对比小数的十进制形式和指数形式,以最短的方式来输出
%f 和 %lf 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入截断
以指数形式输出小数时,输出结果为科学计数法;也就是说,尾数部分的取值为:0 ≤ 尾数 < 10
在进制转换中提到过由于小数部分的转换算法,有许多小数是无法成功换算的,会导致有些时候无法精确输出
将整数赋值给 float 变量时会变成小数
#include
int main(void)
{
float a = 0.302;
float b = 128.101;
double c = 123;
float d = 112.64E3;
double e = 0.7623e-3;
float f = 1.13201451398;
float n = 0.00001;
float m = 12.84;
printf("a=%e\nb=%f\nc=%lf\nd=%lE\ne=%lf\nf=%f\nn=%g\nm=%g\n", a, b, c, d, e, f,n,m);
return 0;
}
运行结果:
a=3.020000e-01
b=128.100998
c=123.000000
d=1.126400E+05
e=0.000762
f=1.132015
n=1e-05
m=12.84
小数和整数间的相互赋值
将整数赋值给小数类型,只需要在小数点后面加0就可以了
将小数赋给整数类型的话则是需要完全舍弃掉小数部分,不是四舍五入,是完全舍弃
例如 int a =1.9999 得到的结果是 a=1
二、数据类型转换数据类型间的转换低位(字节数短)转换成高位(字节数长)是合法的 系统默认强制转换
整数:char->short->int->long(unsigned char->unsigned short->unsigned int->unsigned long)
小数:float->double
但是如果你是从高位转换为低位的话,就会发生数据丢失
丢失法则:从低到高获取到对应低数据类型的位后,高位数据全部不要
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)