C++ float与double类型的简单区别

发布时间 2023-11-03 17:51:58作者: 少玩手机

1. 有效位数与精度

有效位和精度的两个概念是不同的,我们先说float和double各自的有效位。
在float与double中默认的有效位都是6位有效位,意思就是从第一个不为0的数字算起有6个数字是有效的 后边无效的数字也不会显示,如下图:
代码:
image

运行结果:
image

可以看出不管你的float定义的有多少位小数 默认情况下只会输出6位有效位。

可以通过一下语句来修改默认的有效位数:

	cout.precision(k);//k为k为有效位
	setprecision(k);//上述两个语句等价

例如:
代码:
image

运行结果:
image

注意:如果我将这个有效位设置的比较大,那会都给我显示出来嘛?
回答:显然不可能,这里有个前提条件 就是你的有效位与该数据类型的精度之间的关系要正确。
具体来说:当你的有效位设置的位数小于精度时 那么就会显示那么多有效位 但是当你的有效位设置大于精度时,虽然会显示那么多位,但是多余精度的位数是不准确的,此时已经溢出。

如下:
代码:
image

此时,我的有效位设置的与float的精度一样大 结果如下且正确:
image

另一种设置,将有效位设置的很大!
代码:
image

运行结果:
image

double类型也是如法炮制:
只要搞清楚有效位与精度之间的概念和关系即可!
这里强调一下:
有效位:float和double类型的有效位默认都是6位
精度:
float精度是7位
double的精度是15位

2.控制小数位数:

	cout.setf(ios::fixed);
	cout.precision(3);

上述代码,表示我设置输出小数位数为3位 注意不是有效位数哦。
代码:
image

运行结果:
image

注意:上述语句使用也是需要在精度规定的范围内,才有效。
当你设置的小数位数的精度没有超过该数据类型的精度 但是当前的这个数值没有那么多小数位 此时使用0来代替。
代码:
image

运行结果:
image

3.两者上限不同
float: 3e38
double: 1.7e308

4.推荐使用
鉴于 float 精度不够,对于有小数的情况建议使用 double。但考虑到性能, long double 性价比就不高了。使用 float 出现瓶颈的概率会比 double 大些,特别是计算阶乘这种情况下。