double类型几位小数_数据类型

433f480964290d8da914f10c349478f4.png

到目前为止,我们所使用的int类型是仅处理整数的数据类型。而除了int类型之外,还有很多种数据类型。本节我们就来学习处理实数的double类型等。

求平均值

让我们来考虑一下这个问题:读取两个整数,求出它们的平均值。程序如代码清单 demo1.c 所示。

代码清单 demo1.c

/*

将表达式 a + b 括起来的(),是优先运算的标记。如果该表达式是:

a 

就变成了求 a 和 b / 2 的和。这实际上与我们平时所做的数学计算相同,即要遵循先乘除后加减的顺序。

数据类型

通过运行实例我们可以发现输出的平均值并不是 42.5 而是 42,也就是说,小数点以后的部分被舍弃了。只处理数值的整数部分—这就是int类型(type)的特征。

C语言中以 浮点数(floating-pointnumber) 的形式来表示实数,浮点数有几种不同的类型,这里我们来学习一下double(双精度浮点数)类型。让我们通过代码清单 demo2.c 来看看 int 型整数和 double 型浮点数之间的区别。

代码清单 demo2.c

/*

我们声明一个int型变量n和一个double型变量x,并把9.99作为值赋给它们。把实数值赋给int型变量时,小数点以后的部分会被舍弃,因此存储在n中的值就变成了9。

当然,对于n /。2,也就是 9 / 2 来说,由于是整数/整数运算,所以结果的小数点后的部分也被舍弃了。

另外需要注意的是,在使用 printf 函数输出 double 型值的时候,转换说明不能使用 %d,而要使用%f。

► 转换说明中的f就是浮点数floating-point的首字母。%f默认显示小数点后6位数字,变更显示位数的方法将会在后面介绍。

数据类型和对象

接下来我们进一步学习数据类型和变量。

从前面的程序可以看出,int类型只能用来存储整数,即使把实数值赋给它,也只能保留整数部分。与之相对,浮点数中的 double 类型可以用来存储包含小数的实数值。

C语言中有很多种数据类型,后面会介绍。不过,每种类型可存储的值都是有范围的。例如,int类型的取值范围是-32767到32767。

这些数据类型都有一些固有的属性,继承了这些属性而创建出来的实体变量称为对象(object)。由于“变量”这个词应用广泛,听起来比“对象”更习惯一些,本教程统一使用“变量”这个称呼。

整型常量和浮点型常量

直接在程序中指定数值的常量也有类型的区别。像 5 和 45 这样的常量,它们都是整数类型的,所以称为整型常量(integer constant)。像3.14这样包含小数的常量,称为浮点型常量(floating constant)。

通常整型常量都是int类型,而浮点型常量都是double类型。

► 当数值过大,或者有特殊需求的吋候,也可以使用其他类型。

double类型的运算

编写一段程序,读取两个实数值,显示出它们的和、差、积、商。具体如代码清单 demo3.c 所示。

代码清单 demo3.c

/*

如表 5 所示,double类型的变量通过 scanf 函数赋值的时候需要使用格式字符串%lf,请注意这一点。

■ 表 5 转换说明

5cd3ad24fb304aefb6ade93a5539d4f7.png

数据类型和运算

进行整数/整数运算的时候,商的小数部分会被舍弃,但是浮点数之间的运算就不会舍弃处理。

► 运算符%本身的特性决定了它只能用于整数之间的运算.而不能用于浮点数之间的运箅。

像 “int/int” 和 “double/double”这样两个类型相同的操作数之间的运算,所得结果的数据类型和运算对象的数据类型是一致的。

另外,像 “double/int”和“int/double”这样一个操作数是int类型,另一个操作数是double类型的情况,int类型的操作数会进行隐式类型转换,自动向上转型为double类型,运算演变为double类型之间的运算。因此,运算的结果也就变成了double类型。

当然,这样的规则对于+或者*等其他运算也适用。

由于c语言包含了很多种数据类型,详细的规则非常复杂,因此我们可以大致理解如下。

■注意■ 运算对象,即操作数的类型不同时,较小的数据类型的操作数会转换为较大的数据类型(范围更大),然后再进行运算。
► 所谓的“较大的数据类型”,并不是说 double 类型实际上比 int 类型更大,而是说它还可以保存小数点之后的部分。

让我们通过代码清单 demo4.c 所示的程序来验证一下这一规则。

代码清单 demo4.c

/*
  • int型变量的赋值

把 2 赋给 int 型变量 n1,把 2.5 分别赋给n2、n3和n4。由于在赋值的时候会舍弃掉小数点之后的部分,因此最后这四个变量的值都是2。

  • double型变量的赋值

把 2 赋值给double型变量 d1 (但是因为 d1 是double型,所以 2 会被解释为 2.0)。把2.5分别赋给d2、d3和d4的时候,它们都能把这些值完整地保存起来。

类型转换

代码清单 demo1.c 是计算两个整数的平均值的程序,只是输出了平均值的整数部分。这次我们尝试将小数部分也一起输出。程序如代码清单 demo5.c 所示。

代码清单 demo5.c

/*

让我们来看一下求平均值的表达式。

首先计算的是括号内的a+b部分。由于该运算是“int+int”的运算,所以结果也是int型整数。因此,整体的运算如下所示。

int

运算结果是double型。程序执行后将求出 41 和 44 的平均值 42.5。

但是,日常生活中计算平均值的时候,我们都会说“除以2”,而不会说“除以 2.0”。将两个整数的和转换为实数,然后再除以2计算平均值的程序如代码清单 demo6.c 所示。/ 运算符左边的操作数——表达式 (double)(a+b) 的形式如下。

(数据类型)表达式 类型转换表达式

通常这种形式的表达式会把表达式的值转换为该数据类型对应的值。

例如,(int)5.7 会把浮点数 5.7 的小数部分舍去,从而转换为int类型的5;(double)5 会将整数 5 转换为 double 类型的5.0。

代码清单 demo6.c

/*

这样的显式转换就称为类型转换(cast),()称为类型转换运算符(cast operator),如表6所示。

► 英语的cast有很多种意思。比如,作为动词来说,有“扮演某角色”“投掷”“使转向”“计算”“使弯曲”等意思。

■ 表 6 类型转换运算符

60bd6f5ce7fc19b7edcbb71273c7c69a.png

在求平均值的时候,首先根据

(double)(a + b) 类型转换表达式:将a + b的结果转换为double类型

把a + b的值转换为double类型的值(例如整数 85 会转换为浮点数85.0)。

由于表达式(a + b)的运算结果会被转换为double类型,因此求平均值的运算就变成了下面这样。

double/int 实数除以整数

这时,int 类型的右操作数会向上转型为 double 类型。变成“double/double”的除法运算,所得的运算结果是 double 类型的实数。

转换说明

读取三个整数,并显示它们的和以及平均值的程序如代码清单 demo7.c 所示。和前面的程序一样,在求平均值的时候进行了类型转换。

代码清单 demo7.c

/*

在这个程序中,传递给 printf 函数的格式化字符串中的两个转换说明 %5d 和 %5.1f 的含义分别如下所示。

%

转换说明的形式通常如图 A 所示。也就是说,包括%和.在内,总共由六部分构成。

请对比代码清单 demo8.c 的运行结果来理解。

cdfe326215fa18cc0983aae1fa436dff.png

图A 转换说明

【A】0标志

设定了0标志之后,如果数值的前面有空余位,则用0补齐位数(如果省略了0标志,则会用空白补齐位数)。

【B】最小字段宽度

也就是至少要显示出的字符位数。不设定该位数或者显示数值的实际位数超过它的时候,会根据数值显示出必要的位数。

另外,如果设定了"-",数据会左对齐显示,未设定则会右对齐显示。

代码清单 demo8.c

/*

【C】精度

指定显示的最小位数,如果不指定,则整数的时候默认为1,浮点数的时候默认为6。

【D】转换说明符

d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值