Java中的float和double

java中定义float f = 1.0F;时需要带F或者f 而float f2 = 1;时不需要

1.Java会将一种数据类型自动转换成另一种数据类型
2.当遇到包含不同数据类型运算时,自动默认向运算中高级的数据转换 基本数据类型的等级划分如下:byte–short–char–int–long–float–double,由左到右等级升高,double为最高级
当 float f2 =1时,1是int型,当通过赋值运算符赋值给f2时,默认转化成float型,int型转化成float型为向上转型,也是加宽转型,所以不会报错。float f1 = 1.0; 1.0默认为double型,当通过赋值运算符赋值给f1时,相当于向下(窄化转型),可能会出现空间不足情况,此时不能字段转化,必须强制转化或者声明数据类型

float和double的内存结构

float内存结构
double内存结构
float和double的范围是由指数的位数决定的。

-float的指数位有8位,而double的指数位有11位

  • 所以float指数范围为 -128-+127 double的指数范围为 -1024 - +1023,并且指数位是按补码的形式来划分

-其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数。从而决定了浮点数的取值范围

float的范围为(-2)^128 ~ 2^127 double的取值范围为 (-2)^1024 ~ 2^1023
float和double的精度是由尾数的位数来决定的。
float的精度位有23位,double的精度位有52位
1. float:2^23 = 8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数: 2*8388608 = 16777216 。有8位有效数字,但绝对能保证的为7位,也即float的精度为7~8位有效数字;
2. double:2^52 = 4503599627370496,一共16位,同理,double的精度为16~17位。
之所以不能用f1==f2来判断两个数相等,是因为虽然f1和f2在可能是两个不同的数字,但是受到浮点数表示精度的限制,有可能会错误的判断两个数相等!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值