我不明白为什么。双重问题

时间:2019-06-23 22:29:53

标签: c++ double c++17

为什么要加倍环绕自己?我该如何预防呢? 如果我输入45000.98,我希望是45000.98,但是数字是四舍五入的。

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    double a;
    cin >> a;   //if i insert 45000.98
    cout << a;   //output is 45001
    cout << endl << setprecision(2) << a;   //output is 4.5e+04
}

2 个答案:

答案 0 :(得分:1)

双精度类型的指数为11位,小数部分为52位,足以给您足够的精度来表示45000.98,但是据我所记得,setprecision参数接收的字符数是限制,而不是位数小数点后。使用setprecision(8),您应该会像预期的那样看到45000.98。

答案 1 :(得分:0)

双打并没有舍入。流式处理操作会舍入该值-首先是默认值,然后根据您的说明进行舍入。您要求将值四舍五入到2位精度,这就是您所得到的(仅前两位数字:4.5e+04)。您正在使用科学计数法,因为您没有请求足够的数字来达到小数点。

如果要查看45000.98的所有7位数字,请要求至少7位数字的精度。 (不过,您可能希望保持在17位以下,因为这是您开始看到浮点表示形式的产物的地方。)

寻找你感兴趣的贴纸↓↓↓
豫ICP备18024241号-1