Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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++ 使用舍入和pow函数舍入浮点数_C++ - Fatal编程技术网

C++ 使用舍入和pow函数舍入浮点数

C++ 使用舍入和pow函数舍入浮点数,c++,C++,我正在尝试编写一个程序,将一个数字舍入到用户指定的某个小数位。这是对cout.fset和cout.precision以及round和pow函数的要求。最后,程序的输出应该是这样的: 123.4567 2 123.46 123.46 我的主要功能使用了cout.fset和cout.precision,并且运行良好。问题是我的双舍入函数使用了round和pow。出于某种原因,我得到以下输出: 123.4567 2 123.46 0.00 为什么最后一行只打印零?我对编程和C++整体来说是新的,所

我正在尝试编写一个程序,将一个数字舍入到用户指定的某个小数位。这是对cout.fset和cout.precision以及round和pow函数的要求。最后,程序的输出应该是这样的:

123.4567
2
123.46
123.46
我的主要功能使用了cout.fset和cout.precision,并且运行良好。问题是我的双舍入函数使用了round和pow。出于某种原因,我得到以下输出:

123.4567
2
123.46
0.00
为什么最后一行只打印零?我对编程和C++整体来说是新的,所以我会非常感谢你们的帮助。非常感谢。我有一种感觉,这是一个我忽略的小错误/初学者错误,但这是我目前的知识范围

#include <iostream>
#include <math.h>

using namespace std;

double rounding(int pp){
    double d;
    double k = std::pow(10, pp);
    
    return std::round(d * k) / k;
}

int main(){
    double p;
    double d, round;
    
    cin >> d;
    cin >> p;
    
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(p);
    
    cout << d << endl;
    
    round = rounding(d);
    cout << round << endl;
    
    return 0;
}
舍入函数中的d未初始化,且具有不确定值

试试这个:

#include <iostream>
#include <math.h>

using namespace std;

double rounding(double d, int pp){
    double k = std::pow(10, pp);
    
    return std::round(d * k) / k;
}

int main(){
    double p;
    double d, round;
    
    cin >> d;
    cin >> p;
    
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(p);
    
    cout << d << endl;
    
    round = rounding(d, d);
    cout << round << endl;
    
    return 0;
}

您的程序有未定义的行为,您正在函数中使用未初始化的变量d。在不同的作用域中以相同的名称命名变量不会使其共享相同的值。这是一个完全不相关的变量。