欢迎光临散文网 会员登陆 & 注册

150天打卡day03_基本数据类型浮点型

2021-02-23 15:00 作者:关阿姨的Java日记  | 我要投稿

浮点数类型

Java中利用浮点数来存储“小数”,有两种数据类型float和double,float是单精度浮点数,double叫做双精度浮点数,什么为精度呢?精度其实就是指所存储有效尾数的长度 ,之所以叫做浮点数,而不是叫做小数是因为在存储小数的时候需要将小数点的位置进行移动(浮动),所以称之为是浮点数,说白了本质就是在数学课中的科学计数法,可以计算非常大的数值.

IEEE-754: 是"电气电子工程师学会(IEEE)"定义的754号标准。是被各种编程语言广泛采用的浮点数标准。

float类型

float:单精度浮点类型 占用32位内存空间

float单倍精度浮点数,采用32位2进制存储的浮点数,其中1位表示正负的符号位,8位存储指数, 23位存储尾数。由于浮点数中分别保存了数字的尾数和指数,当指数大时候,其范围就会变得非常大,所以采用浮点数的好处是可以存储非大的数字,如:3.14乘以10的20次幂。

使用浮点数需要注意的点:

  1. float浮点数的直接量有两种写法:

    1. 通常写法:3.5F  88.68F  适合通常小数

    2. 指数形式:3.3452E100F或者 1.234E-5F

  2. 默认的浮点数直接量是double类型,若要给float类型的变量赋字面量的值,则要在字面量后面加F(或f)

  3. float不能精确表示10进制小数,保存数据时候存在尾数的舍入(四舍五入)误差

float类型共32位,1位为符号位,指数8位,尾数23位,(float的精度是23位,即能准确表达23位的数,超过就被截取了)

float存储的数据的范围比int类型大,但精度比int小,因为int的精度是31位。

Java 也提供了BigDecimal用于实现超⾼精度小数计算。

案例:

注意:使用浮点数会存在舍入误差,这是正常的情况,如果想使用精确的运行,可以使用BigDecimal

double类型

double 是双倍精度浮点数,其内部采用64位2进制存储的浮点数,其中1位表示正负的符号位,11位存储指数, 52位存储尾数。因为double的尾数是float尾数两倍多,顾称为双倍精度浮点数,这就是double的由来。double不仅尾数长,指数位也大,所以double的表示的范围非常大,利用double完全可以轻松处理宇宙级别的数字。由于double范围足够大所以Java就不再需要更大的数据类型了。

Java 也提供了BigDecimal用于实现超高精度小数计算。

 

使用double要注意:

  1. 由于double表示的数据更精确,所以默认的小数直接量是double类型,如:2.8 4.5

  2. 可以使用D/d后缀表示double类型的直接量,如:2.5D 5D

  3. double也支持指数形式赋值: doube d = 356.5E8

  4. 由于double精度高,计算更加精确,大多数场合使用double类型

  5. double也不能精确表示10进制小数,保存数据时候存在尾数的舍入(四舍五入)误差,相对于flfloat来说更加精确。 

浮点数直接量是double类型

浮点数的直接量有两种写法:

1)通常写法,如:3.14、314、0.1、.5。

2)科学计数法,如:1.25E2、1.25e2、1.25E-2。其中,1.25E2表示1.25乘以10的2次方。

默认的浮点直接量为double型,如果需要表示float类型的直接量,需要加“f”或“F”后缀。

double运算时会出现舍入误差

2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样,

所以,2进制表示10进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。

如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal 类来实现

浮点数的计算

有浮点数参加的数学运算称之为是浮点数运算,如果有一方不是浮点数将其转换为浮点数再进行运算,浮点数计算结果是浮点数,简单理解就是小数与小数计算得到小数,浮点数计算是会存在误差的。

浮点类型总结

  • 浮点类型共2种:float和double

  • 分别是单精度和双精度,双精度使用较多。

  • 注意使用浮点数计算存在的问题,需要多加练习。

还没有结束哦,小可爱继续移步到下一篇,wink~


150天打卡day03_基本数据类型浮点型的评论 (共 条)

分享到微博请遵守国家法律