zoukankan      html  css  js  c++  java
  • cout输出控制——位数和精度控制

    刷到一道需要控制输出精度和位数的题目

    刚开始以为单纯使用 iomanip 函数库里的 setprecision 就可以,但 OJ 给我判了答案错误,后来一想这样输出并不能限制位数只能限制有效位数。

    比如说 0.000101000110

    用 setprecision(4) 答案是 0.000101 这里甚至把最后一位的有效数字 0 省略了!!

    后来了解到 fixed 关键字

    那么在这里若要控制小数点后 N 位 只要写成 

    cout << fixed << setprecision(N) 

    即可达到效果。

    然而却有了下面的问题。。。

    cout << fixed << setprecision(4) << 0.000101000110 << endl;
    cout << 3.141593 <<endl;
    

    却得到了这样的输出结果

    0.0001
    3.1416

    没错,之后的输出被同样的输出格式所限制了。

    那就要找到办法清除输出控制

    遗憾的是 CPP 目前并没有办法消除 setprecision 标签的效果方法,

    但是消除 fixed 还是有的

    在不需要 fixed 效果输出的前一行加上

    cout.unsetf( ios::fixed );
    

    例如

    cout << fixed << setprecision(4) << 0.000101000110 << endl;
    cout.unsetf( ios::fixed );
    cout << 3.141593 <<endl;

    输出结果如下:

    0.0001
    3.142

    但可以通过再次设定 setprecision 标签来达到控制位数

    例如

    cout << fixed << setprecision(4) << 0.000101000110 << endl;
    cout.unsetf( ios::fixed );
    cout <<setprecision(6) << 3.141593 <<endl;
    

    输出结果如下:

    0.0001
    3.14159

    所以在碰到对精确度和位数都有要求的题目时需要格外注意 setprecision 标签的设置状态!

    参考链接:cplusplus.com/reference/ios/fixed

  • 相关阅读:
    code light
    asp.net(C#)定时自动发送邮件
    示例代码(一)
    devExpress 7.2.5
    使用VSIUAL C#.NET操作Excel -把DataTable中的数据写入Excel
    C#日期格式化的几种处理方法
    配置
    关于Windows 2008 R2 Web服务器环境搭建、安全流程
    安全
    FTP 用户目录病隔离
  • 原文地址:https://www.cnblogs.com/4770k/p/6103011.html
Copyright © 2011-2022 走看看