首页 > 解决方案 > 避免对 Pi 的第 N 位进行四舍五入

问题描述

我正在尝试解决这个集合
的第一个问题 要查找并显示 Pi 的值直到第 N 位(作为用户输入受限于某个最大值,我猜最大 ds 可以容纳的最大小数位数很长我猜是双倍的?)
下面是我尝试的一个片段。

//declarations 

typedef numeric_limits< long double > db;
    int MAX = db::digits10;
    int N = 0; //digit allowance
    long double pi_val = M_PI;
    string string_pi;

//user input
    while(1){
        cout << "Enter a value of n < or = " << MAX << endl;
        cin >> N;
        if(N>18){cout << "Lesser please" << endl;}
        else
            break;
    }

//outputs
    cout << "Pi till the " << N << " digit is: ";

    cout << setprecision(N+1) << fixed << pi_val << endl;

    string_pi = to_string((long double)pi_val * pow(10, N));

    cout << string_pi << endl;

    cout << "The Nth digit of pi is: " << string_pi[N] << endl; 

Ps 我知道有更多新颖的方法可以解决这个问题,但由于我是 cpp 的一个极端初学者,通过让我的想法发挥作用,我会获得更好的成就感。
现在的问题是,它正确显示第 N 个数字,但 Pi 的输出直到第 N 个值总是被四舍五入,尽管有 'fixed' 和 'setprecision()' 所以我不得不显示一个额外的数字来与后一个输出相匹配
怎么能我解决了这个问题,如果可能的话不改变我使用的主要逻辑
谢谢

标签: c++pi

解决方案


推荐阅读