float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
四舍五入和取整
先说四舍五入
第一种round()函数;
第二种强制类型转换 +0.5
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <stdlib.h>
#include <sstream>
#include <map>
#include <set>
typedef long long ll;
using namespace std;
int main()
{
int n, sum;
double k;
cin>>k;
cout<<round(k)<<endl;
cout<<int(k+0.5);//强制类型转换
}
精确到小数点任意位数的四舍五入
实现方法:比如精确到第n位小数,就先乘以10的n次方
再加0.5,利用强制类型转换,再乘以10的n次方
比如 5.3212,,精确到第三位,先乘以1000,变为5321.1,
然后加0.5 取(int),变为5321,再除1000,得到5.321
(可以再通过把整数部分提出来,减轻运算位数的负担)
板子如下(好像是有点问题的,整数部分一旦大于10000,就会固定保留两位小数,但是我也不知道该怎么改)
double round(double number, unsigned int n)
{
ll num = number;
num -= number;
for(int i = 0; i < n; i++)
{
num*=10;
}
num = (ll)(num + 0.5);
for(int i = 0; i < n; i++)
{
num/=10;
}
return num+number;
}
取整函数
在脑子里想象一个数轴
ceil() 向上取整(也就是向右取整)
floor() 向下取整(也就是向左取整,是数学上常说的取整)