以下代码:
double x = 3.14;
double y = 3.14159265359;
cout<<fixed<<setprecision(6)<<x<<", "<<y<<endl;
打印:3.140000、3.141593
我想打印没有不必要零的值:3.14、3.141593 如何在不使用字符串和字符串流类的情况下做到这一点?
以下代码:
double x = 3.14;
double y = 3.14159265359;
cout<<fixed<<setprecision(6)<<x<<", "<<y<<endl;
打印:3.140000、3.141593
我想打印没有不必要零的值:3.14、3.141593 如何在不使用字符串和字符串流类的情况下做到这一点?
当既没有选择固定格式也没有选择科学格式时, 的含义是要输出的所有setprecision
数字的数量(不仅仅是在点之后)。
因此,这应该适合你
double x = 3.14;
double y = 3.14159265359;
cout<<setprecision(7)<<x<<", "<<y<<endl;
输出:
3.14, 3.141593
您可以使用cmath
来计算整数部分的位数,如下所示:
但如果数字小于 0.1 将是错误的
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(){
double a = -123.456789;
double b = 4567.45;
if (a > 1 || a < -1){
cout << setprecision(5 + int(log10(fabs(a)) + 1)) << a << endl; //anser is -123.45679
}
else {
cout << setprecision(5) << a << endl; // if a = 0.0123456 answer will be 0.012347
}
if (b > 1 || b < -1){
cout << setprecision(5 + int(log10(fabs(b)) + 1)) << b << endl; //anser is 4567.45
}
else {
cout << setprecision(5) << b << endl;
}
}