【问题标题】:restore original value after setprecision? [duplicate]设置精度后恢复原始值? [复制]
【发布时间】:2015-10-29 06:37:35
【问题描述】:

我在网上搜索过,但找不到我需要的东西。

有人推荐使用

streamsize ss = std::cout.precision();

但我无法让它工作。

setprecision后如何将double值设置回原来的状态?

#include <iostream>
using namespace std;

int main() 
{
 double a;
 cout << "enter a double value: ";
 cin >> a;
 cout << "your value in 3 decimals is " << setprecision(3) << fixed << a << endl;
 cout << "your original value is " << a << endl;

 return 0;
 }

显然上面的代码不会返回a的原始值。

我的预期输出是:如果用户输入 1.267432

your value in 3 decimals is 1.267
your original value is 1.267432

【问题讨论】:

    标签: c++


    【解决方案1】:

    如何将双精度值设置回原始状态 setprecision?

    为此,您必须在使用setprecision() 之前获得精度。在您的问题中,您已经通过以下行提到了它:

    streamsize ss = std::cout.precision();
    

    但我无法让它工作。

    这里是如何使用它的:

    streamsize ss = std::cout.precision();
    
    double a = 1.267432;
    
    std::cout << "a = " << a << '\n';
    
    std::cout.precision (3);
    std::cout << "a becomes = " << a << '\n';
    
    std::cout.precision (ss);
    std::cout << "Original a= " << a << '\n';
    

    输出会是这样的:

    a = 1.26743

    a 变为 = 1.27

    原始 a=1.26743

    参考:setprecision

    Run live.

    【讨论】:

    • 此方法无效。例如,如果用户输入 1.42324,则输出为 0.000 和 1.423
    • @Tasmin,我编辑了答案。我还测试了代码。它完全按照您的意愿工作。 Running code link.
    【解决方案2】:

    你可以这样试试:

    #include <iomanip>
    #include <iostream>
    
    int main()
    {
        double a = 1.267432;
        std::cout << std::fixed << std::showpoint;
        std::cout << std::setprecision(3);
        std::cout << a << endl;
        return 0;
    
    }
    

    【讨论】:

    • 我在发布问题之前多次尝试过这种方法,但它不起作用。我不明白为什么。
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2018-08-31
    • 2019-05-22
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多