Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将pi输出到小数点后n位而不舍入(用户输入)_C++ - Fatal编程技术网

C++ 将pi输出到小数点后n位而不舍入(用户输入)

C++ 将pi输出到小数点后n位而不舍入(用户输入),c++,C++,我是新来的,所以我为我缺乏知识而道歉 基本上,我正在尝试创建一个允许用户输入数字(n)的程序。用户输入该数字后,程序应将pi输出到小数点后n位,但不舍入该数字。例如,如果用户输入“3”,我希望输出显示3.141,而不是3.142 我成功地将代码编写为输出到小数点后n位,但毫不奇怪,输出会将数字四舍五入,这可能是由于使用了setprecision函数。我的代码可以在这里看到: int main() { double n; auto pi = 3.1415926535897932; cout &

我是新来的,所以我为我缺乏知识而道歉

基本上,我正在尝试创建一个允许用户输入数字(n)的程序。用户输入该数字后,程序应将pi输出到小数点后n位,但不舍入该数字。例如,如果用户输入“3”,我希望输出显示3.141,而不是3.142

我成功地将代码编写为输出到小数点后n位,但毫不奇怪,输出会将数字四舍五入,这可能是由于使用了setprecision函数。我的代码可以在这里看到:

int main()

{
double n;
auto pi = 3.1415926535897932;

cout << "Enter the number of digits of pi you want displayed" << endl;
cin >> n;

cout << std::fixed << setprecision(n) << "Your pi value is:" << pi << endl;
return 0;
}
intmain()
{
双n;
自动pi=3.1415926535897932;
cout n;

cout在执行
运算符中的设置的实现上在执行
运算符中的设置的实现上,您必须将数字转换为精度为n+1的字符串,然后仅打印前n个字符。很抱歉,我混淆了,但要执行此操作,我是将pi保存为字符串?还是n?换句话说,我要执行s字符串pi或字符串n?pi。将计算的pi转换为n+1,将其转换为字符串,然后从左侧开始只打印字符串的n个字符。你说你想要“不舍入”,但从技术上讲这是不可能的。从你的示例来看,你想要“始终向下舍入”(又名:Truncate),这很好。@MooingDuck。如何在我的代码中实现这个截断函数?我没有这方面的经验。您必须将数字转换为精度为n+1的字符串,然后只打印前n个字符。很抱歉,我弄糊涂了,但要这样做,我是将pi保存为字符串还是n?换句话说,我是将pi保存为字符串?还是n?换句话说,我要执行st环π或字符串n?π。将计算的π转换为n+1,转换为字符串,然后从左边开始只打印字符串的n个字符。你说你想要“不舍入”,但从技术上讲这是不可能的。从你的例子来看,你想要“总是向下舍入”(又名:截断),这很好。@MooingDuck。如何在我的代码中实现这个truncate函数呢?我没有这方面的经验,我很欣赏这项工作,它实际上输出的是四舍五入的圆周率,但如何让这个程序让用户可以输入他们想要的小数位数呢?我尝试添加了一个cOmand使用stringstream代码,但得到了非常奇怪的输出。我已经尝试了几个小时,但每次我得到一个有效的输出,它只是四舍五入。慢慢地开始放弃hahaI欣赏这项工作,这实际上是输出pi值的四舍五入,但如何让这成为一个用户可以输入数字的程序他们想要哪一个小数位?我尝试使用stringstream代码添加cin命令,但得到了非常奇怪的输出。我已经尝试了几个小时,但每次我得到一个有效的输出,它都会被舍入。慢慢地开始放弃哈哈
#include <iostream>
#include <iomanip>
#include <cfenv>

int main()
{
    constexpr auto pi{ 3.1415926535897932 };
    std::fesetround(FE_DOWNWARD);

    for(int n = 0; n < 16; ++n)
        std::cout << "Your pi value is: " << std::fixed << std::setprecision(n) << pi << '\n';
}
Your pi value is: 3
Your pi value is: 3.1
Your pi value is: 3.14
Your pi value is: 3.141
Your pi value is: 3.1415
Your pi value is: 3.14159
Your pi value is: 3.141592
Your pi value is: 3.1415926
Your pi value is: 3.14159265
Your pi value is: 3.141592653
Your pi value is: 3.1415926535
Your pi value is: 3.14159265358
Your pi value is: 3.141592653589
Your pi value is: 3.1415926535897
Your pi value is: 3.14159265358979
Your pi value is: 3.141592653589793
#include <iostream>
#include <iomanip>
#include <sstream>

int main()
{
    constexpr auto pi{ 3.1415926535897932 };
    std::stringstream ss;
    ss << std::fixed << std::setprecision(16u) << pi;

    for (int n = 1; n < 18; ++n) {
        if (n != 2) // no point in printing "3" and "3." additionally.
            std::cout << "Your pi value is: " << ss.str().substr(0, n) << '\n';
    }
}
#include <cstdlib>
#include <limits>
#include <iostream>
#include <iomanip>
#include <sstream>

int main()
{
    constexpr auto pi{ 3.1415926535897932 };
    std::stringstream ss;
    ss << std::fixed << std::setprecision(16) << pi;

    unsigned digits;
    while (std::cout << "How many digits of pi do you want? (up to 16) ",
           !(std::cin >> digits) || digits > 16)
    {
        std::cerr << "Input Error :(\n\n";
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    std::cout << "Your pi value is: " << ss.str().substr(0, 2 + digits) << '\n';
}