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;
}
再来看代码的运行结果:
接下来分析一下代码, 代码逻辑很简单, 这里只说一行:
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;
}
运行结果:
从这里虽然b比a多了1, 但是由于float只能精确到第6, 7位, 所以多加的1对于b来说等于没有, 因此他们的相减的结果为0, 这也进一步说明了float的不精确
今天的文章C++之Float类型, double类型分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30644.html