00:02
各位,我们看一下下一个数据类型,浮点型。不典型呢,它其实是用来保存一个小数的,对不对。分裂型有两种,第一种呢叫单精度,第二种叫。双进度,那既然它是一个表示小数的,所以说我们看一个最基本的案例,比如说我要去保存一个人的薪水这么一个变量salary,我就可以这样去写。NUMBER1NUMBER2,然后呢,我们也可以用NUMBER1加NUMBER2,把它这个和呢保存在另外一个double类型的变量中,然后输出,大家还记不记得这是干什么呀?就是如果我写的是百分号点2F,这个表示保留小数点,小数点两位对不对?所以说这个很这个基基本案例我们就不说了,因为前面已经说过。紧接着我们来看。浮点型刚才所说的分类。那么它第一种呢,我们称之为float单精度,这个就叫单精度。
01:05
写到这里叫单精度。单精度。那么这个double呢?我们把它称之为双精度。OK,那同学们有没有发现单精度和双精度最大的区别是它们存储的大小不一样,我们的float这个数据类型,单精度它是四个字节。而double呢,它是八个字节,因此同学们要注意一点,因此同学们注意一点就是说。它的值的范围呢,这个float呢,它是表示这么一个范围,就是1.21.2的十的这个负38次方,而这个正数呢,是3.4E38次方。这个大家应该看是一个科学计数法。这个E加38表示十的多少多少次方。那么同学们注意,它能表示的这个精度呢?只能精确到小数点的六位。
02:06
就是说它只能保存到小数点六位以后,而我们double呢,同学们可以看到它是八个字节,它表示的范围同学们可以看到明显的比单精度要大很多。而且呢,它能表示保存到小数点的15位,因此精度是不一样的,那这里我在特别的说明一下,关于浮点数在机器里面存放的形式,它是由这么几个部分构成的,第一个呢,由符号位表示,也就是说我们这个浮点数呢,也分负数和正数。另外呢,就是它的指数位和尾数位,指数位指的就是这个。指数位、尾数位就是指的点多少多少,所以它是由三个部分构成,因此我们可以得出浮点数其实都是近似值,这点大家注意啊,就是浮点数,浮点数是一个近似值。
03:02
这他进四子。OK,这点大家注意一下。那么尾数部分因为可能丢失,所以说造成精度损失,就是我刚才说的,它是一个近似值。那接着我们继续往下面来看,那比如说我们看浮点数的这个使用细节,待会呢,我举几个例子,浮点数常见的默认是double型的,就说什么意思呢?比如说你给了一个1.1,这个1.1。它默认的数据类型是double类型,而不是float类型。注意听这句话啊,那么声明,如果你要声明一个float类型的陈列呢,会加一个F,我给同学们演示一下这句话的含义是什么,同学们打开我们的Vs code,那现在呢,我新建一个,那我我我把这个注销一下。我新建一个文件,新建一个文件,我们取个名字叫做float的啊,叫我们叫做float。
04:08
和double的一个案例,Double的DEMO float,好,这边呢写成T。好同学们,我们来看一下它的特点是有哪些哈,然后呢,我同样把这个C呢。CPP改一下,同样我在这里引入。一个头文件。那同学同学们,我们来看一下V啊,走一个。好,我们先来看这句话的含义是什么,就是说浮点数的常量值默认是double类型。举个例子,同学们看,假如我有一个float d1,然后呢,我给了1.1,同学们注意观察哈,当我编译,当我进行编译。生成这个方案的时候,大家有发现他会提示一个信息,他说初始化从double到float阶段,这句话的意思能看出来什么意思吗?也就是说他告诉我们这个1.12其实是一个double类型。
05:08
而不是就是这句话就这么去理解的,那当然有同学说了,说老师假如我就想给一个值是1.1,但是呢,我我希望不要截断后面的0.1,怎么办呢?可以加F就可以了。加个F,也就是说如果你写个1.1F,那么这个值同学们注意看老师说的这个,这个就是一个float类型。而上面的同学们可以看到一点,一,它实际上是个W型的,能理解我的意思吧,所以说如果说同学们把一个小数要付给一个float,那么你后面应该加一个F,加给F呢,就表示这是一个float了,那同样我们继续来看。如果我给一个double第一第三可以看到我给一个1.3,你看这个地方就OK的,这个地方是OK的,为什么呢?因为1.3本身就是W型,而你接收的这个变量第三呢,也是一个W型,这是没问题的,那同学们可以看到我编译一下。
06:17
我编译,那同学们可以看到,这个时候呢,这个时候呢,报的一个warning也只在第七行,报的第八行,第九行并没有报错说明。这种写法和这种写法都是OK,明白这意思吧,好的,那这点我们就说完了。第二点浮点型的常量值呢,它有十进制或者是科学计数法的两种形式,我分别给同学们举个例子,那怎么写呢?我们打开这里,好,我们打开这个案例,我们还是在这里来写。嗯,我们就用float来,Float来接收吧,Float用double来接收吧,好吧,Double第四。
07:02
等于。好,我们看看第一种写法,5.12。这个可以给的,如果这个给到的话,这个就表示把一个double给到第四没问题吧,我们再看这种写法。如果这种写法呢,就表示给的是一个float的,呃,Float类型,还有这种写法比较怪吧,这种写法我给他解释一下。Double第五。那么同学们可以看到这种写法,其实它是等价。它等价于什么写法呢?等价于这个0.512,也就是说如果前面呢,你这个小数点前面的这个整数部分是零,可以简写成点512。明白这个意思,紧接着我们继续往下看,那么还有一种呢,就是科学计数法,科学计数法呢,我们也给同学们来看一下,Double第六等于,比如说我这样写啊,同学们看到这有一个5.12,然后呢E的二次方,这个等价什么呢?我给大家写一写,这个等价于5.12乘以十的。
08:18
多少次方呢?二次方。也就是说,它相当于是去乘以一个十的二次方,就相当于可以这样这样去理解。实际上就相当于1.5.12乘以一个100,这个算的算的出来是等于512。能理解好,紧接着还有一种写法double第七,那么你看到有些人这样写5.12E的负二次方,那这个等价什么呢?同学们注意听,这个等价于5.12 5.12除以除以,除以什么呢?实际上实际上它是相当于乘以十的多少次方呢?负二次方。哎,它是等等于。
09:01
5.12乘以十的负二方其实相当于5.12去除以十的二次方,相当于是除以100,也就它应该等于0.0。512能理解,也就是说这这个就是我们的十进制写法,这个就是我们的科学计数法。明白了,那现在我们这样子,同学们,我们把这两个,把这几个值都输出来,我们看看分别是什么,我们验一下哈,PF,我们把前面的七个值都输出来,我们以默认的方式输出。De等于。FF,我们前面不指定小数位了哈,不指定小数位,我们看看它是输出一个什么情况,第二等于百分之F,我。我这样子,我把它处理一下。第三。OK,第四。第五。对吧,然后第六。
10:01
第六。然后我们看第七,一次性把它输出来,我们看一下它的输出情况,那这是第一第二第三第四。第五、第六、第七。然后呢,我在这里再给他一个get char,让我们的控制台停在这里。现在同学们,我们编译。好,我们就直接运行了啊,直接运行看一下效果。好,我们对照这个结果的输出,我们来验一下,看结果到底是怎么样子的,看对不对。好,我们看第一个字,我们看第一个值,第一个是1.1。把这个呃,Double给到float,它保留的是小数点六位,没有问题,周老师,那这没有截断呢,它只是告诉你有可能截断,因为你现在这个现在float我们不是说了吗?Float本身可以保数保留到小数点两位,你现在这个是小数点。呃,一小数点一位本身就还在它范围以内呢,所以说就没有发生截断,因此它仍然是1.1,只是后面他添了五个零,看到没有,所以你你数一下小数位几位,123456对不对?好第二呢,没有什么可说的,也是OK的,第三这个就是1.3,也是默认按照这个小数点六位给输出,大家看后边。
11:22
大家看后面这个值,第四第45.12,后面也加了四个零,第五是不是零点多少啊,没问题吧,第六第六大家看第六是5.12乘以十的。二次方相当于乘以100,乘以100过后呢,就变成了512,因为它后面是按小数输出的,所以说后面给你补了六个零,第七也是一样的,大家看第七呢,呃,我们讲到它输出是0.0512输的是不是样子啊,0.0换行了512,后面补了两个零,完全没有问题。所以同学们呢,要注意这个细节哈,就是如果以后看到这种写法,还有下面一种写法要看得懂。
12:06
要看得懂。好的,那关于这一个它的细节二,我们就讲完,我们再看,通常情况下应该使用double类型。为什么使用double类型呢?因为double类型它能够表示的这个精度比float要更准确。比如说同学们看。我们假如要保留到小数点第九位。那你如果用float,它就保存不下来,它会截断给大家演示一下,比如说大家看。我给同学们演示一下啊。我给同学们演示一下,比如说你多来几位。现在呢,看12345678。你现在把这个值给到我们的这个。呃,第一你会发现呢,它会只保留到小数点的六位经,其他的就会被损失掉,我们再运行一下。
13:01
看一下效果哈,运行之看效果。看效果。那这时呢,我们可以看到,诶,你看同学们注意观察,注意观察,你本身是写到了这么多,但是他给你的是189。091相当于说后面这个九呢,他四舍五入进了一位,后面这个九五被干什么呀,舍掉了。那你精度就不高嘛,那有些同学说老师,那假如说我们要保留更多的什么呢,你写成double。OK,你写成double,当然你要你要写成double,过后呢,我们再来运行一下,看这个结果是什么样子的,走起来。诶,当然我要把这个关闭一下哈。走起了。那。起来。好,我们现在呢,运行一下,我们看这个结果好,看这个结果大家有发现,诶说老师这个好像仍然没有发生变化,这是因为我在输出的时候,同学们,我在输出的时候呢,我这个小数点的位数默认16位,因此呢,我要把这个小数点多加点,比如说我要写到15。
14:12
明白我的意思吧,就保留到小数点15位,以后我们再来走一个。跑起来。抛弃了。诶,上面这个是不是没有关闭啊,没有关闭,没有关闭的话呢,我们运行之。关了过后我们再跑起来。呃,同学们,现在再来看小数点的位数就OK了。看到1.1890是不是保留啊,保留小数间15位了是不是,那有些同学说,有些同学说老师那你不对啊,那你刚才用float是不是也可以呢?看啊,你如果是float,虽然你也写了保留点小数,保留小数点十位,但是它仍然不会保留的那么多,因为它本身只有四个字节来存放它,不,它不会保留到这么多位的,虽然你指定保留到小数点15位,但是实际上没有用。
15:03
没有用,好,我们来运行一下,看看是不是这样子的,来我把这个关闭再跑起来。我们看看,即使你给这个float指定的十位,它会怎么样呢?看效果。好,我们可以看这个结果是非常之奇怪的一个结果,大家看这里。你看啊,1.18诶你看这里同学们看这里后面保留一堆乱七八糟的东西,大家有没有发现,你看他也保留十位,但是你看本身你是1.1809095,他写的是1811.18909096,然后后面一堆这个乱七八糟的东西。显然。这个跟我们要的这个精度是不一致的,你看我我如果你看这个地方是跟我们想的想的不一样,他按理说应该全部够补零吗,但实际上他给的这个值。乱七八糟的是不是乱七八糟的呀,就跟我们实际想要的这个精度并不一致,但是你写成double就没问题,你看你写成double,刚才是不是已经演示过了纸,这里面比较重要,我再多说一句啊,你看跑起来这个时候人家会精确的把后面给你怎么样啊补零,那这个才是我们真正要的这个精度。
16:17
说说同学们,如果说同有同学们就是要去保留精度较大的值,就是刚才老师学的这句话。尽量使用大。尽量使用double好了,刚才老师还讲了一句话,就是如果后边我们这个F没有写,其实它默认相当于这个字。能理解了吧,我写到这里就可以了,好吧,这里啊,就是在输出的时候,输出时,输出时如果格式为F。默认默认保留,保留小数点,小数点多少位呢?六位。六位其实就是我们float的默认的那一个精度值,好同学们,那现在我还把这个改回去哈,还把这个改回去,大家知道是什么意思就可以了。
17:09
好同学们,那关于我们这个浮点型的使用呢,老师就讲到这,尤其要注意它的细节,尤其要注意它细节,好我先我把这个float这一块呢。的这个内容我们简单的板述一下,内容比较少哈,就flow这块呢,内容并不多,我们就顺带手把它给整理了,那刚才我们讲的是什么呢?讲的是float类型,就也就是float就是我们的蝴蝶型。福建型我们是这样讲的啊,同学们我们是这样讲的,走起来。不练习呢?首先我们做了一个基本的介绍。对,我们做了一个基本介绍,说了一下C语言的float类型,主要是表示小数的,然后呢,来了一个最简单的一个案例,就它是不是我们把它拿过来。
18:02
放到我们的一个表格中,把这个说完了以后呢,我们又说什么呢,同学们。我们又说什么了,我们是不是给大家说了一下浮点型的一个分类和它的在内存里面是按什么方式来存放的?那么不典型呢,在我们的这一个。这一个C语言里面呢,有两种类型,单精度和双精度是吧,我把它放这哈,放这,然后我们这边又提到了,就是他在内存中的一个存放形式。存放形式,好,我们把这列到这来,紧接着呢,我们又给大家举了一些关于蝴蝶型使用的细节问题。细节问题,细细节问题尤其要同学们小心一点,就是精度的问题。如果说你你不注意这个精度,那到时间有可能会出问题。啊,浮点浮点型的精度问题,好,我把这个呢整理到这边来,好给它来一个小小的编号。
19:05
编号就可以了,诶这边这个不要编号,十经之间不要编号,12这个不要编号,最后我们这边有个代码。对吧,有代码。代码OK,代码演示也给大家放在这,代码在哪里呢?就在老师这个地方写的float double的DEMO里面去。给他来一个小箭筒。好,这就是我们这一块内容,我看标号再稍微改一改浮点类型。分类啊分类咱们是应该是三标号为三才对。第二为三才对。好,那同学们关于浮点型,我们就给大家聊到这里,大家好好的领会一下。
我来说两句