C++之Float类型, double类型

C++之Float类型, double类型c++里的小数分为float和double两种类型,这两种类型,直接看代码,及运行结果我们来看一下他们有什么区别:#include"iostream"usingnamespacestd;intmain(){ floattub=10.0/3.0; doublemint=10.0/3.0; //注意1.0E6之间不能有空格 constfloa…

c++里的小数分为float和double两种类型, 这两种类型, 直接看代码, 及运行结果我们来看一下他们有什么区别:

#include "iostream"
using namespace std;

int main() {
	float tub = 10.0 / 3.0;
	double mint = 10.0 / 3.0;
	// 注意1.0E6之间不能有空格
	const float million = 1.0E6;
	
	cout << "tub = " << tub;
	// cout的默认输出是会把无效位(也就是末尾的0给去掉), 并可能
	// 采用科学计数法进行显示(这行代码就显示: “, a million tubs = 3.33333e+06”)
	cout << ", a million tubs = " << million * tub;
	// 这行代码就强制让cout输出原始数据例如:333333.250000
	cout.setf(ios_base::fixed, ios_base::floatfield);
	cout << ", after translate a million tubs = " << million * tub;
	cout << ", \n and ten million tubs = ";
	cout << 10 * million * tub << endl;
	
	cout << "mint = " << mint << " and a million mints = ";
	cout << million * mint << endl;
	return 0;
}

再来看代码的运行结果:

C++之Float类型, double类型

接下来分析一下代码, 代码逻辑很简单, 这里只说一行:

cout.setf(ios_base::fixed, ios_base::floatfield);

这行代码就强制让cout输出原始数据例如:333333.250000, 而不是cout默认的那种输出3.33333e+06这种格式, 仅仅是为了好对float和double的结果进行对比

通过运行结果我们能看的出来:

tub 和 mint还都算是精确, 但是把他们放大1000000后发现tubs已经不精确了, 而mints还算是精确, 

我们可以看出来, 在该系统中,  将tub*1000000后的结果为3333333.250000, 也就是不再精确, 但是保证了7位有效位, 也就是小数点后能保证6位是精确的(如果tub * 1000000 * 10 结果就更不精确了, 说明了float的精确度是有限的), 与之相比, double能至少保证13位是有效的,  因此相比而言double更精确一点.
在程序中默认情况下1.23和1.23E8都存储为double类型(个人觉得是更精确), 如果希望常量存储为float类型, 需要在常量后面加上f或F, 例如1.23f, 如果要存储为long double类型, 则可以使用l或L后缀:

1.23f   float类型;     1.23E5F  float类型,   1.23E4 double类型,   1.23L long double类型

 

我们再来看另一个例子:

#include "iostream"
using namespace std;

int main() {
	float a = 1.23E10;
	float b = a + 1.0f;
	
	cout.setf(ios_base::fixed, ios_base::floatfield);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "b - a = " << b - a << endl;
}

运行结果:

C++之Float类型, double类型

从这里虽然b比a多了1, 但是由于float只能精确到第6, 7位, 所以多加的1对于b来说等于没有, 因此他们的相减的结果为0,  这也进一步说明了float的不精确

今天的文章C++之Float类型, double类型分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30644.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注