以下代码:
double x = 3.14;
double y = 3.14159265359;
cout<<fixed<<setprecision(6)<<x<<", "<<y<<endl;
打印:3.140000,3.141593
我想打印没有不必要的零的值: 3.14,3.141593如何在不使用字符串和字符串流类的情况下做到这一点?
答案 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