sdnuoj 1036.四舍五入

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() 向下取整(也就是向左取整,是数学上常说的取整)

猜你喜欢

转载自blog.csdn.net/weixin_51216553/article/details/109537747