double数据类型
今天我们要学习一种新的数据类型——double 类型变量。
在日常生活中,我们经常会遇到需要表示小数的情况,比如计算圆的面积、物体的重量等。在 C++中,我们可以使用 double 类型变量来存储这些小数。
那么,什么是 double 类型变量呢?它是一种用于存储双精度浮点数的数据类型。它的取值范围较大,可以表示非常大或非常小的小数。等一等double是双精度浮点型的数据类型,那有没有单精度的浮点数据类型呢?还真有,这种类型我们用英文float表示。float和double类型性质非常相似,但是表示数据的精度较低。因此在本书中我们主要使用double类型,对于float类型只要知道他与double类型一样就行。
接下来,我们来看一下如何定义和使用双精度浮点类型变量。首先,我们需要使用关键字double 来定义变量。例如:
double radius;
radius = 5.0;
或:
double pi = 3.141593;
当你将一个整型值赋给一个double变量时,整型值会自动转换为double类型:
double d = 10; // 10 会被转换为 10.0
反之,如果将一个double类型的值赋给一个整型变量,会导致小数部分被截断:
Int i = 3.14;
cout<<i<<endl;
输出的结果将是3,而不是3.14。因为小数部分被截断,只有整数部分赋值给了变量i。
那么如果想获得一个浮点型数据的小数部分该怎么办呢?可以参考一下下面的代码:
double pi = 3.14, decimal;
int integer;
integer = pi;//获取pi的整数部分
decimal = pi – integer;//减去整数部分剩余小数部分
cout << decimal << endl;
结果为0.14,即变量pi的小数部分。
注意,把有一个double型数据赋值给int型变量,是把小数部分直接截断,并没有进行四舍五入的操作的。比如:
int a = 1.999;
变量a中保存的整数为1,而不是2!所以这种赋值操作是不会四舍五入的!那么请聪明的你思考一下,如果需要得到四舍五入以后的整数部分该怎么办呢?这里给出一个参考的方案:
double f;
int integer;
cin >> f;
integer = f + 0.5; //四舍五入以后取整
cout << integer << endl;
有了前节课的基础,double类型变量的知识对于聪明的你并不难理解。但仍有几个地方需要注意:
- 对于某个浮点型的数据(常量),我们默认为他是double类型。比如0这个数据,我们默认他是double类型而不是float类型。
- 由于精度问题,直接比较两个double值是否相等可能会导致意外结果。通常的做法是检查两个值之间的差值是否小于某个小的阈值(epsilon),比如下面的代码:
double EPSILON = 1e-9; //1e-9是10的负九次方的科学计数法
double a = 0.1 + 0.2;
double b = 0.3;
if (fabs(a – b) < EPSILON)
{
// 认为 a 和 b 相等
// 直接判断a==b会导致出错
}
- double类型可以表示一些特殊值,如正无穷大(INFINITY)、负无穷大(-INFINITY)和非数值(NaN)。这些值在某些运算中可能会出现,需要正确处理,比如:
double inf = INFINITY;
double nan = NAN;
- 在用cout输出double类型数据的时候,如果小数部分超过五位就显示前五位(四舍五入以后)。如果不足五位就显示全部小数部分。
总结:到目前为止我们已经接触到了四种C++数据类型。其实常用的数据类型有六种。现在我们来一起总结一下:
第一种是浮点型数据,包括:双精度浮点类型double和单精度浮点类型float。这两种数据类型的性质几乎一模一样,唯一不同就是double能存储的数据范围更大,精确度更高。
第二种是整型数据,包括:整型数据类型int和长整型数据类型long long(中间有空格)。这两种数据类型的性质也是几乎一模一样,唯一不同就是long long数据类型表示的数据范围更大。
第三种数据类型是字符型char。这种数据类型能表示字符,但实际存储的是ASCII,数据范围是0-127。所以在很多时候char也可以看做是int类型的数据。
第四种数据类型是布尔型bool。这种类型能表示真(true)或者假(false),但实际存储的数据是1和0。这种数据类型,我们会在后面想写极少。
