Java学习里程-----Java基础_3基本数据类型的转换

一、什么叫转换

转换这个名词说起来其实有点抽象,我是不知道如何去说,我举个栗子来说明

水->温度升高->水蒸气->降温(一直降)->冰->融化->水

水可以变成水蒸气、也可以变成冰,最后还能变成水。说白了,反正都是水,但是可以来回转换。

二、为什么要转换

一般是因为需求,举例来说:

你现在有1块钱,然后花了8毛,你剩下多少钱?

答案很简单,2毛钱。但是如果让你去实现代码怎么去实现?

我们呢这样来做,1块钱是整形,没有小数,我们用int来定义

int money = 1;

花了8毛钱,那就用1块钱去减去这个八毛,但是,不是一样的类型是不可以进行操作的。

我们就需要转换,我直接先转换了,后面再说怎么转,如何去转。

废话不说上代码来看!

先不要看这个值具体多不对,我知道是肯定不对的,但是这个是有原因的,原因我放在下面去讲述。

你会发现我其实并没有做什么,就是用1 去减去 0.8 ,然后就得到了得数,而其中我并没有做什么操作,那为什么一个int可以去和这个float去相减?这是为什么呢?

其实这个是Java底层帮我们自动转换的。

三、转换的种类

接着上面说,自动转换,这种自动转换,在Java中叫做自动类型转换,而除去这种自动转换,还有一种叫做强制类型转换,一定要牢记啊,两种转换!!!

先说自动类型转换:

转换条件:1,转换前后的数据类型兼容; 2,转换后的数据类型的表示范围要比转换前的大;

很明显int 和 float 都属于数字类型的基本数据类型。而且,float 包含 int ,因为小数的数量要比整形的要多,所以,可以使用自动类型转换。

所以我们上面这个1 减去 0.8,Java帮我们把这个1自动转换成1.0,然后由1.0 去减去 0.8。(至于得数不对,我下面会说)

再来说强制类型转换:

先举栗子:

你瞅瞅,编译器报错了,错误原因是:Type mismatch: cannot convert from double to float

翻译一哈:类型不匹配:无法从double转换为float

因为double的大小要比这个float大的多了,系统认为无法自动转换,但实际上0.5根本没有超过double和float的大小,怎么办呢?

这时候,强制类型转换来了:

我们强行给他变成float就好了,可能你也发现了,这是一种不安全的转换;

如果double的值我们不确定,一但这个值超过了float的大小,就会出现异常。

所以,要谨慎去使用。

四、float计算出现误差

我们上面计算了1 - 0.8,得数居然是0.1999999 ???答案不应该是0.2吗?怎么会这样?

出现这个情况,根本原因是计算机所使用二进制01代码无法准确表示某些带小数位的十进制数据。

看这个之前,你需要知道如何将十进制数字转换成二进制数字。如果不知道没有关系,自己要去百度一下,看看如何转换

这里呢,我们来这里转换:《在线进制转换》

我们可以看到,1转换完还是1

我们再来看0.8

.....

然后我们用上面的1 去减去这个0.1100110011001100..... 这个数字(注意,这里是二进制计算,不是十进制计算。)

最后计算完成是这样的:0.001100110011001100110011001100110011001100110011001101

然后我们来对比一下,上面是0.8,下面是0.2

0.1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 11001101

0.0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 01

我们会发现,长度变了。多了两位???

这样就导致我们如果缺少后两位的话,数据不准确。

大家可以把0.2 去掉后两位,(去掉两位是为了和上面的0.8的位数一样,相同的数据类型,位数一定是一样的,所以我们也需要保证数据类型长度相同)然后再去看得数,就是这样。0.19999999.... 无限接近于0.2 但就是不等于0.2

这里大家需要自己去好好琢磨。

谢谢大家,如果你有收获了,就点点关注,点点赞哦~~~~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值