首页 > 解决方案 > 除以 1000 舍入 double var 并丢失小数位

问题描述

#include<iostream>
using namespace std;

int main()
{
    unsigned int x = 293125555;

    double y =  (double)x/1000.0;

    cout << y << endl;

    return 0;
}

我希望输出为 293125.555 但我得到的是 293126。这是因为 double 存储在内存中的方式吗?

标签: c++double

解决方案


std::numeric_limits<T>limits

提供有关库编译的特定平台中算术类型(整数或浮点)属性的信息。

std::setprecisioniomanip

设置用于格式化输出操作的浮点值的小数精度。

因此,您可以使用:

#include <iostream>
#include <iomanip>  // setprecision()
#include <limits>

using namespace std;

int main()
{
    unsigned int x = 293125555;
    double y = (double)x/1000.0;

    cout << setprecision(numeric_limits<double>::digits10 + 1)
         << y
         << endl;

    return 0;
}

并得到预期的结果:

293125.555

推荐阅读