C++四舍五入保留N位小数

最近遇到这个问题,不难吧,不过搜网上的东西,没看到比较合心水的答案,自己搞了两种做法,请君侧耳为我听。

乘10法

这种想法最容易想到,就是将数字乘10,乘N次,加上0.5后取整,最后再除回去。加上0.5取整应该很容易理解,是等价于四舍五入的,因为X.49999……+0.5后取整是不会进位的,结果是X;而X.5000……1+0.5后取整会变成X+1(当然忽略double或float能表示的精度)。

比如:

23.3451保留两位小数,那么连续乘10,2次,得到2334.5,加上0.5后取整得到23345,再除回去,变成23.35,是不是对了呢?

简单代码如下:

#include <stdio.h>
#include <cmath>

typedef long long LL;

double round(double number, unsigned int bits) {
    LL integerPart = number;
    number -= integerPart;
    for (unsigned int i = 0; i < bits; ++i)
        number *= 10;
    number = (LL) (number + 0.5);
    for (unsigned int i = 0; i < bits; ++i)
        number /= 10
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值