一、C语言中的小数
小数分为整数部分和小数部分,它们由点号.分隔,例如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 <stdio.h>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.1351398;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-01b=128.100998c=123.000000d=1.126400E+05e=0.000762f=1.13n=1e-05m=12.84
小数和整数间的相互赋值
将整数赋值给小数类型,只需要在小数点后面加0就可以了
将小数赋给整数类型的话则是需要完全舍弃掉小数部分,不是四舍五入,是完全舍弃
例如 int a =1.9999 得到的结果是 a=1
二、数据类型转换
数据类型间的转换低位(字节数短)转换成高位(字节数长)是合法的 系统默认强制转换
整数:char->short->int->long(unsigned char->unsigned short->unsigned int->unsigned long)
小数:float->double
但是如果你是从高位转换为低位的话,就会发生数据丢失
丢失法则:从低到高获取到对应低数据类型的位后,高位数据全部不要