一、什么是浮点型变量?
浮点型就是用来存小数的变量。
生活中的小数:
身高:1.75米
圆周率:3.14159
考试平均分:89.5分
温度:36.5℃
这些都要用浮点型(小数)来存,浮点数一般分为两种,单精度浮点数(float)以及双精度浮点数(double), 默认情况下涉及到小数类型的题目我们都是使用双精度浮点数double来解决,因此我们重点学习双精度浮点数的用法。
二、为什么不用int存小数?
#include<bits/stdc++.h>using namespace std;intmain(){ int score = 89.5; //错误用法! cout << score; // 输出:89(小数部分丢了) return 0;}
int 只能存整数,给它小数它会直接把小数部分砍掉,不是四舍五入!所以上面的输出对应的结果是89。
三、double怎么用?
1. 基本用法
#include<bits/stdc++.h>using namespace std;intmain(){ double high = 1.75;// 直接写小数 double pi = 3.1415926;// 可以有很多位小数 double a = 1.1, b = 2.2;// 可以一次定义多个 return 0;}
2. 定义时的注意事项
#include<bits/stdc++.h>using namespace std;intmain(){ double score1 = 90;// 可以,变成90.0 double score2 = 90.0;// 建议这样写,一眼看出是小数 return 0;}
建议好习惯:涉及到小数,就写成小数形式,比如 90.0 而不是 90
四、double的运算
1. 基本运算
#include<bits/stdc++.h>using namespace std;intmain(){ double a = 10.5; double b = 3.2; double sum = a + b;// 13.7 double d = a - b;// 7.3 double p = a * b;// 33.6 double q = a / b;// 3.28125 return 0;}
2. 整数和小数混合运算
#include<bits/stdc++.h>using namespace std;intmain(){ int x = 10; double y = 3.0; double r1 = x / y;// 3.33333 只要有小数参与,结果就是小数 double r2 = x / 3;// 3 (全是整数,结果是整数!) double r3 = x / 3.0;// 3.33333 (除数写成3.0就好了) return 0;}
五、 初学者最容易踩的坑
整数除法忘了转小数
#include<bits/stdc++.h>using namespace std;intmain(){ double avg = (90 + 85 + 93) / 3; //错误! cout << avg; //输出:89(应该是89.333...) return 0;}
输出的答案是89,因为都是整数参与计算,如果想得到小数,需要这样修改:
#include<bits/stdc++.h>using namespace std;intmain(){ double avg1 = (90 + 85 + 93) / 3.0; cout << avg1 << endl; //输出是89.333... double avg2 = 1.0 * (90 + 85 + 93) / 3; cout << avg2 << endl; //输出是89.333... return 0;}
六、 必学技能:控制小数输出
默认输出很丑,而且小数位默认5位,不能应对保留指定位数
#include<bits/stdc++.h>using namespace std;intmain(){ double pi = 3.14159265358979; cout << pi;// 可能只输出3.14159 不够用 return 0;}
方法1:用fixed和setprecision控制
#include<bits/stdc++.h>using namespace std;intmain(){ double pi = 3.14159265358979; // 保留2位小数 输出:3.14 cout << fixed << setprecision(2) << pi << endl; // 保留5位小数 输出:3.14159 cout << fixed << setprecision(5) << pi << endl; // 保留10位小数 输出:3.1415926536 cout << fixed << setprecision(10) << pi << endl; return 0;}
记住:
fixed 表示固定小数位数
setprecision(n) 表示保留n位小数
用了之后,后面所有的 double 输出都受控制
但是这两个单词太难记住了啊,怎么办呢?我们还可以通过printf()来控制
方法2:用printf()来控制保留指定小数位输出(常用!!!)
1. 最基础:%lf
#include<bits/stdc++.h>using namespace std;intmain(){ double pi = 3.14159; printf("%lf", pi); //输出:3.141590(默认6位小数) return 0;}
2. 控制位数:%.nlf 保留几位就%.几lf
#include<bits/stdc++.h>using namespace std;intmain(){ double pi = 3.14159; printf("%.1lf", pi);// 输出:3.1(保留1位) printf("%.2lf", pi);// 输出:3.14(保留2位) printf("%.3lf", pi);// 输出:3.142(保留3位,会四舍五入!) printf("%.0lf", pi);// 输出:3(保留0位,即整数) return 0;}
关键:%.2lf 里的 2 就是要保留的小数位数;注意 四舍五入规则 printf 控制小数位时,自动四舍五入!
#include<bits/stdc++.h>using namespace std;intmain(){ double a = 3.14159; printf("%.2f", a);//3.14 第三位1 < 5, 舍去 double b = 3.14559; printf("%.2f", b);//3.15 第三位5 >= 5,进位! double c = 2.9999; printf("%.2f", c);//3.00(进位到整数) double d = 1.2345; printf("%.3f", d);//1.235(第四位5进位) return 0;}