3

以下代码:

double x = 3.14;
double y = 3.14159265359;
cout<<fixed<<setprecision(6)<<x<<", "<<y<<endl;

打印:3.140000、3.141593

我想打印没有不必要零的值:3.14、3.141593 如何在不使用字符串和字符串流类的情况下做到这一点?

4

2 回答 2

2

当既没有选择固定格式也没有选择科学格式时, 的含义是要输出的所有setprecision数字的数量(不仅仅是在点之后)。

因此,这应该适合你

double x = 3.14;
double y = 3.14159265359;
cout<<setprecision(7)<<x<<", "<<y<<endl;

输出:

3.14, 3.141593
于 2013-10-22T10:34:52.453 回答
2

您可以使用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;
    }
}
于 2020-05-09T15:48:17.570 回答