设置精度 + 固定 - 没有不必要的零的打印值



以下代码:

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;
    }
}

最新更新