Java数据类型的转换

一、数据类型之间的转换

1.自动类型转换:

 

2.强制类型转换:

        简单来说,强制类型的转换就是在想要转换的变量前面加一个(),并在()里写上想要转换的类型,如图所示,但是要注意在进行强制类型转换的时候会出现精度丢失的情况。

 二、浮点型的精度丢失

1.浮点类型在计算机当中的存储

        首先我们来看一下浮点类型在我们的计算机当中是如何存储的

0

  • float存储需求是4字节(32位), 其中1位最高位是符号位,中间8位表示阶位,后32位为数值位
  • double存储需求是8字节(64为),其中1位最高位是符号位,中间11位表示阶位,后52位为数值位。

        double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。例如,用7位有效数字足以精确地表示普通雇员的年薪,但表示公司总裁的年薪可能就不够用了。实际上,只有很少的情况适合使用float类型,例如,需要快速地处理单精度数据,或者需要存储大量数据。

2.浮点型的精度丢失

①:产生精度丢失的原因

首先我们看一个例子

这和我们预期的情况完全不符,然后我们来将10进制的0.2转化为2进制进行存储

 算法是乘以2直到没有了小数为止

  • 0.2 * 2 = 0.4         取整数部分 0
  • 0.4 * 2 = 0.8         取整数部分 0
  • 0.8 * 2 = 1.6         取整数部分 1
  • 0.6 * 2 = 1.2         取整数部分 1
  • 0.2 * 2 = 0.4         取整数部分 0
  • 。。。。。。       。。。。。。

0.2的2进制从上到下可以表示为 00110011......

注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。

还有更多点开下方链接查看

浮点型出现丢失精度的原因 - 假程序猿 - 博客园https://www.cnblogs.com/straybirds/p/6295036.html?utm_source=itdadao&utm_medium=referral

精度丢失就是我们的位数不够表示我们整个数值了

②:如何解决精度丢失

警告:浮点数值不适用于禁止出现舍入误差的金融计算中。例如,命令System out println
(2.0-1.1 )将打印出0.899999999999999, 而不是人们想象的0.9。其主要原因是浮点
数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十进
制无法精确地表示1/3一样。如果需要在数值计算中不含有任何舍入误差,就应该使用
BigDecimal类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值