C++ 使用舍入和pow函数舍入浮点数
我正在尝试编写一个程序,将一个数字舍入到用户指定的某个小数位。这是对cout.fset和cout.precision以及round和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++整体来说是新的,所
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。在不同的作用域中以相同的名称命名变量不会使其共享相同的值。这是一个完全不相关的变量。