[C++]C++四舍五入保留到n位小数

#include <sstream>
#include <iostream>
#include <iomanip>

using namespace std;

/**
 * 四舍五入保留到n位小数
 * @param number
 * @param bits
 * @return
 */
static double round_1(double number, unsigned int bits) {
    stringstream ss;
    ss << fixed << setprecision(bits) << number;
    ss >> number;
    return number;
}

typedef long long LL;

/**
 * 四舍五入保留到n位小数
 * @param number
 * @param bits
 * @return
 */
static double round_2(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;
    return integerPart + number;
}

int main() {
    double pi = 3.1415926;
    double r_pi1 = round_1(pi, 3);
    double r_pi2 = round_2(pi, 4);
    cout << "pi=" << pi << endl;
    cout << "r_pi1=" << r_pi1 << endl;
    cout << "r_pi2=" << r_pi2 << endl;
}

运行结果

posted @ 2020-10-30 10:35  Xu_Lin  阅读(550)  评论(0编辑  收藏  举报