Logo

郎哥编程

第9讲:浮点类型

2025-12-06 18

C语言的浮点类型有两种不同的表示形式:十进制数和科学计数法。十进制数形式,由数字和小数点组成,且必须有小数点,如0.123、12.85、26.98等;科学计数法形式,如:2.1E5、3.7e-2等。其中e或E之前必须有数字,且e或E后面的指数必须为整数。

科学计数法

一种简化计数的方法,对于位数较小的数值,科学计数法没有什么优势,但对于位数较多的数值其计数方法的优势就非常明显了。例如:光的速度是300,000,000米/秒,全世界人口数大约是6,100,000,000。类似光的速度和世界人口数这样大数值的数,读、写都很不方便,仔细观察上面的两个数值,光的速度可以写成3*108米/秒,全世界人口数可以写成6.1*109。这种计数方法就是科学计数法,用Java语言科学计数法表示光速是3E8,世界人口数大约是6.1E9。

一个较大的数值(>0)可以用下面的方式来表示:

a * 10n (1<=a<10,n为整数)

其中,a是该数值的有效位数,有效位数从左边第一个不是0的数起,到末尾数字为止,所有的数字(包括0,科学计数法不计10的n次方),称为有效数字。例如:光速是3E8,其有效数字是1位,值是3;世界人口数大约是6.1E9,其有效数字是2位,值是6.1。

n是该数值的整数部分减1的正整数。

一个较小的数值(<0)可以用下面的方式来表示:

a * 10-n (1<=a<10,n为整数)

a的取值同上面相同,n的取值为原数中左边第一个不为0的数字前面所有的0的个数(包括小数点前面的0)。

浮点类型

在C语言中,浮点类型有float和double两种,分别表示单精度浮点数和双精度浮点数。精度是指描述一个数值的准确程度,在数学运算中,经常会用到近似数,近似数与原数值非常相近,但又不完全符合原数值,只能说在某种程度上近似。精度与近似数相似,也是用一个与原数值非常相近的数代替原来的数值。

前面说过存储一个数值所用的字节越多,其精度越高,数值范围也越大。由此看来,精度与存储字节数密切相关,float类型的存储空间是4个字节,其表示的值范围约为10-38到1038,double类型的存储空间是8个字节,其表示的值范围约为10-308到10308,float存储数值的精度和范围要小于double存储数值的精度和范围。因此,float是单精度数值,double是双精度数值。

 

 

图  浮点型变量占用的存储空间

浮点变量

float变量可按如下方式声明:

float  price = 12.35f;
float  average = 89.2f;  

double变量可按如下方式声明:

double  pi = 3.14159265;
public  double  average = 89.2987017;

数值赋值给float变量时,数值尾部要加上小写“f”或大写“F”声明为float数值,不然编译器会给出从“double”到“float”截断的警告。因为在C语言中,带小数的数值默认为是double类型,double类型转换为float类型,自然要损失精度,位数被截断了。

C语言还提供了long double类型,表示长双精度浮点数,但C语言并没有long double的确切精度,对于不同系统平台可能有不同的实现,有的是8字节,有的是10字节,有的是12字节或16字节,C语言函数sizeof(long double)可以输出当前系统平台下long double占用的字节数。

浮点数值常量的后缀有:f或F(单精度浮点数)、l或L(长双精度浮点数),因为浮点型常数总是有符号的,所以没有u或U后缀。例:1.23e5f;  1.23L;  -123.45f;

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论