首页 > 编程语言 >C++ float与double类型的简单区别

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

时间:2023-11-03 17:57:02浏览次数:40  
标签:double 代码 float C++ 有效 设置 精度

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 大些,特别是计算阶乘这种情况下。

标签:double,代码,float,C++,有效,设置,精度
From: https://www.cnblogs.com/zxLai/p/17808100.html

相关文章

  • C++ 字符串与数值间的转换(只归纳了常用情况)
    很多编程中字符串与数字间的转换是一种常见的需求下面总结了C++中字符串与数值间是如何进行转换的。目录:1.字符串转数字(C版本)2.字符串转数字C++风格3.数字转字符串1.字符串转数字(C版本)strings1="123";strings2="123.1";inti=atoi(s1.c_str());......
  • C++的对象与类的含义
    C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。C++中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如:#include<s......
  • C++头文件和std命名空间
    C++是在C语言的基础上开发的,早期的C++还不完善,不支持命名空间,没有自己的编译器,而是将C++代码翻译成C代码,再通过C编译器完成编译。这个时候的C++仍然在使用C语言的库,stdio.h、stdlib.h、string.h等头文件依然有效;此外C++也开发了一些新的库,增加了自己的头文件,例如:iostream......
  • C++函数重载
    在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是int、float、char、bool等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:voidsw......
  • C++类成员的访问权限以及类的封装
    C++通过public、protected、private三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。Java、C#程序员注意,C++中的public、private、protected只能修饰类的成员,不能修饰类......
  • C++构造函数初始化列表
    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:#include<iostream>usingnamespacestd;classStudent{private:......
  • C++使用多线程将数据写入文件
    #include<iostream>#include<vector>#include<thread>#include<fstream>//使用多线程将数据写入文件voidwriteToFile(conststd::vector<std::string>&data,conststd::string&filename){//创建一个文件输出流std::ofstreamfile......
  • C++中string类基本使用的详细归纳
    目录:string类的初始化操作实例化得到一个string类对象之后的常用成员函数的操作2.1从外部键盘获取输入的方式(注意与C风格字符串做区别)2.2比较string对象2.3遍历每个字符2.4string类中的insert()增加成员函数2.5string类中的erase()删除成员函数2.6常用基本操作......
  • C++使用new来初始化指向类的指针
    C++使用new来初始化类的指针1.ClassName*p=newClassName;调用默认构造函数。如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如classNoConstructor//没写构造函数的类{public:~NoConstructor(){}voidprintVal(){......
  • c++实现哈希桶
    闭散列的回顾在前面的学习中我们知道了闭散列的运算规则,当两个数据计算得到的位置发生冲突时,它会自动的往后寻找没有发生冲突的位置,比如说当前数据的内容如下:当插入的数据为33时计算的位置为3,可是位置3已经被占领了并且4也被占领了,但是位置5没有被占领所以插入数据33就会占领位置5,......