setprecision + fixed - 打印值没有不必要的零

时间:2013-10-21 14:47:11

标签: c++

以下代码:

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

打印:3.140000,3.141593

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

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:1)

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

因此,这应该对你有用

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

输出:

3.14, 3.141593