double类型输出为什么总是被转换为科学计数法?
作者:
假如有点困
,
2024-04-02 12:20:18
,
所有人可见
,
阅读 7
问题:
对于这三个数123456,123456.7,1234567,在cout输出时,为何前两个在输出时正常输出,最后一个输出时却是科学记数法表示
程序
int main() {
double a = 123456;
double b = 123456.7;
double c = 1234567;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "c:" << c << endl;
return 0;
}
输出如下:
a:123456
b:123457
c:1.23457e+06
我们可以看到变量a是按照正常输出;b是浮点数,进行了四舍五入;c却变成了科学计数法表示,e+06表示1.23457要乘以10的6次方。
原因
不管是c还是c++, 不管是float类型还是double类型,都属于浮点数,浮点数输出时默认精度为6位。
对于a,正好6位,正常输出;
对于b,因为有小数,并且可以四舍五入,因此只保留整数部分,并且小数位进1,因此为123457;
对于c,总共7位,四舍五入后,假如不用科学记数法,则为1234570,有效位数还是7位,所以只能用科学记数法。
对于其它整型,不管多少位都会正常输出。
我们可以通过setprecision()设置精度,来验证,记得包含头文件<iomanip>
验证
#include <iomanip>
#include <iostream>
using namespace std;
int main() {
double a = 123456;
double b = 123456.7;
double c = 1234567;
float d = 123456.7;
uint64_t e = UINT64_MAX;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "c:" << c << endl;
cout << "d:" << d << endl;
cout << "e:" << e << endl;
cout << setprecision(4) << "====set precision 4=====" <<endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "c:" << c << endl;
cout << "d:" << d << endl;
cout << "e:" << e << endl;
return 0;
}
输出
a:123456
b:123457
c:1.23457e+06
d:123457
e:18446744073709551615
====set precision 4=====
a:1.235e+05
b:1.235e+05
c:1.235e+06
d:1.235e+05
e:18446744073709551615