[七]基础数据类型之Float详解

Float 基本数据类型float  的包装类

Float 类型的对象包含一个 float 类型的字段

属性简介

用来以二进制补码形式表示 float 值的比特位数

public static final int SIZE = 32;

二进制补码形式表示 float 值的字节数

public static final int BYTES = SIZE / Byte.SIZE;

表示基本类型 float 的 Class 实例

public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");

能够表示的最大值只有标准化一种形式,也就是前文提到过的

public static final float MAX_VALUE = 0x1.fffffeP+127f;

标准化的最小值

public static final float MIN_NORMAL = 0x1.0p-126f;

最小值还有非标准化的形式

public static final float MIN_VALUE = 0x0.000002P-126f;

正无穷它等于 Float.intBitsToFloat(0x7f800000) 返回的值

public static final float POSITIVE_INFINITY = 1.0f / 0.0f;

负无穷它等于 Float.intBitsToFloat(0xff800000) 返回的值

public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;

NaNnot a number它等于 Float.intBitsToFloat(0x7fc00000) 返回的值

public static final float NaN = 0.0f / 0.0f;

指数真值的有效的最大值

public static final int MAX_EXPONENT = 127;

指数真值的有效的最小值

public static final int MIN_EXPONENT = -126;

这些属性,看过上一篇浮点数简介的话,可以很清晰的理解

构造方法

Float 依然提供了根据基本类型float以及float的String形式构造

String形式依然借助于parseXXX形式 parseFloat

另外,也提供了根据基本类型double进行构造的方式,内部直接强转

Float(float value)

Float(String s)

Float(double value)

直接强转

常用方法

对于浮点数,有一些额外的属性方法

我们浮点数介绍中,对于浮点数的表示形式进行了介绍

Float提供了对于指定值的表示形式的获取方法, 这表示形式也就是是一个32位的二进制位序列

Float 获取表示形式对于获取表示形式 提供了两种形式的方法,主要是针对于非数字的NaN的不同表示他们可以与intBitsToFloat 可以进行互相转换 floatToRawIntBits 如果参数为正无穷大,则结果为 0x7f800000 如果参数为负无穷大,则结果为 0xff800000 如果参数为 NaN,则结果是表示实际 NaN 值的整数 与 floatToIntBits 方法不同,floatToRawIntBits 不压缩所有将 NaN 编码为一个“规范”NaN 值的位模式。   在所有情况下,结果都是一个整数,将其赋予 intBitsToFloat(int) 方法将生成一个与 floatToRawIntBits 的参数相同的浮点值   本地方法 floatToIntBits 如果参数为正无穷大,则结果为 0x7f800000 如果参数为负无穷大,则结果为 0xff800000 如果参数为 NaN,则结果为 0x7fc00000   在所有情况下,结果都是一个整数 将其赋予 intBitsToFloat(int) 方法将生成一个浮点值,该浮点值与 floatToIntBits 的参数相同 (而所有 NaN 值则会生成一个“规范”NaN 值)   依赖floatToRawIntBits

floatToRawIntBits

如果参数为正无穷大,则结果为 0x7f800000 如果参数为负无穷大,则结果为 0xff800000 如果参数为 NaN,则结果是表示实际 NaN 值的整数 与 floatToIntBits 方法不同,floatToRawIntBits 不压缩所有将 NaN 编码为一个“规范”NaN 值的位模式。   在所有情况下,结果都是一个整数,将其赋予 intBitsToFloat(int) 方法将生成一个与 floatToRawIntBits 的参数相同的浮点值   本地方法

floatToIntBits

如果参数为正无穷大,则结果为 0x7f800000 如果参数为负无穷大,则结果为 0xff800000 如果参数为 NaN,则结果为 0x7fc00000   在所有情况下,结果都是一个整数 将其赋予 intBitsToFloat(int) 方法将生成一个浮点值,该浮点值与 floatToIntBits 的参数相同 (而所有 NaN 值则会生成一个“规范”NaN 值)   依赖floatToRawIntBits

floatToRawIntBits

如果参数为正无穷大,则结果为 0x7f800000 如果参数为负无穷大,则结果为 0xff800000 如果参数为 NaN,则结果是表示实际 NaN 值的整数 与 floatToIntBits 方法不同,floatToRawIntBits 不压缩所有将 NaN 编码为一个“规范”NaN 值的位模式。   在所有情况下,结果都是一个整数,将其赋予 intBitsToFloat(int) 方法将生成一个与 floatToRawIntBits 的参数相同的浮点值   本地方法

floatToIntBits

如果参数为正无穷大,则结果为 0x7f800000 如果参数为负无穷大,则结果为 0xff800000 如果参数为 NaN,则结果为 0x7fc00000   在所有情况下,结果都是一个整数 将其赋予 intBitsToFloat(int) 方法将生成一个浮点值,该浮点值与 floatToIntBits 的参数相同 (而所有 NaN 值则会生成一个“规范”NaN 值)   依赖floatToRawIntBits

将表示形式转换为Float,返回对应于给定位表示形式的 float 值本地方法其实就是按照布局计算float 如果参数为 0x7f800000,则结果为正无穷大 如果参数为 0xff800000,则结果为负无穷大 如果参数值在 0x7f800001 到 0x7fffffff 或在 0xff800001 到 0xffffffff 之间,则结果为 NaN   Java 提供的任何 IEEE 754 浮点操作都不能区分具有不同位模式的两个同类型 NaN 值 不同的 NaN 值只能使用 Float.floatToRawIntBits 方法区分

浮点数有几种特殊的表示,比如 无穷 NaN等

额外的,也提供了一些相关的方法

static boolean isNaN(float v)

静态方法是否一个非数字 (NaN) 值非数值 true

static boolean isFinite(float f)

静态方法是否是有限的浮点数有限的true

static boolean isInfinite(float v)

静态方法是否是无穷大是无穷大  true

boolean isInfinite()

实例方法依赖静态方法

boolean isNaN()

实例方法 依赖静态方法

比较

static int compare(float f1, float f2)

静态方法比较两个floatf1 < f2 小于0f1 = f2 等于0 f1 > f2 大于0

int compareTo(Float anotherFloat)

实例方法两个对象进行大小比较,依赖于静态方法

parseXXX系列

字符串解析 为 基本类型,

不需要对象,所以都是静态方法

返回一个字符串形式表示的基本类型float表现效果同valueOf(String),不过valueOf 返回的是对象

如果String是null或者不包含可以解析的字符串将会抛出异常

底层依赖sun.misc.FloatingDecimal

valueOf系列

把基本基本类型 包装为对象

用来创建获得对象,所以无需对象,全都是静态方法

不同于之前介绍的整数 数值,他们都有缓冲

float不存在缓存,valueOf也是直接new 对象

static Float valueOf(float f)

static Float valueOf(String s)

依赖parseFloat方法所以上面说跟valueOf(String)表现效果相同,本身就是一样

Float没有 decode方法

XXXValue系列

类似之前介绍的其他数值类型全部都是强转内部的  valuereturn (XXX)value;

byteValue() shortValue() intValue() longValue() floatValue() doubleValue()

toString  toXXXString  系列

static String toString(float f)

静态方法

String toString()

实例方法内部调用  static String toString(float f)

static String toHexString(float f)

静态方法返回 float 参数的十六进制字符串表示形式

toString系列好像没什么好说的,又好像有很多要说的

用到的时候对于格式字符的规定有疑惑直接查看API    

equals

boolean equals(Object obj)

将此对象与指定对象进行比较 当且仅当参数不是 null 而是 Float 对象,且表示的 float 值与此对象表示的 float 值相同时,结果为 true 为此,当且仅当将方法 #floatToLongBits(double) 应用于两个值所返回的 int 值相同时,才认为这两个 float 值相同   注意,在大多数情况下,对于 Float 类的两个实例 f1 和 f2,当且仅当 f1.floatValue() == f2.floatValue() 的值为 true 时,f1.equals(f2) 的值才为 true。但是,有以下两种例外情况: 如果 f1 和 f2 都表示 Float.NaN,那么即使 Float.NaN==Float.NaN 的值为 false,equals 方法也将返回 true 所以此处使用的是floatToIntBits,而不是raw的   如果 f1 表示 +0.0f,而 f2 表示 -0.0f,或相反,那么即使 0.0f==-0.0f 的值为 true,equal 测试也将返回 false 该定义使得哈希表得以正确操作。

hashCode

static int hashCode(float value)

静态方法获得一个value的hashcode值

int hashCode()

实例方法依赖静态方法

其他方法

sum(float, float)

max(float, float)

min(float, float)

总结

其实浮点数的表示形式与使用规范才是重点

Float只是float的包装,float也只是IEEE754 标准的一个实现,根本还是在于标准的理解

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Danny的专栏

【J2SE快速进阶】——递归算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

10210
来自专栏后端技术探索

视觉直观感受 7 种常用的排序算法

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。...

11020
来自专栏菩提树下的杨过

数据结构与算法C#版笔记--排序(Sort)-下

5、堆排序(HeapSort) 在接触“堆排序”前,先回顾一下数据结构C#版笔记--树与二叉树 ,其中提到了“完全二叉树”有一些重要的数学特性: ? 上图就是一...

21450
来自专栏Java3y

选择排序就这么简单

选择排序就这么简单 从上一篇已经讲解了冒泡排序了,本章主要讲解的是选择排序,希望大家看完能够理解并手写出选择排序的代码,然后就通过面试了!如果我写得有错误的地方...

422100
来自专栏Java 源码分析

八大排序算法

​ 八大排序算法是面试经常考到的,尤其是快排,希尔排序和归并也是经常会让写代码的题目,其实只要用一句话说明了他们的原理我们写起代码就没那么困难。 冒泡排序...

53330
来自专栏Python数据科学

十大经典排序算法(Python代码实现)

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见...

39110
来自专栏向治洪

算法笔记之排序

最近在看《算法笔记》,如果单从算法来说,这本书真正做到了短小精悍,首先以排序入题,那么我们今天也来说说排序。 排序 将一堆杂乱无章的元素按照某种规则有序排列的过...

238100
来自专栏owent

C/C++语言常用排序算法

资料由互联网收集整理,供新手参考学习 这里又生动点的演示:http://www.cnblogs.com/wangfupeng1988/archive/2011...

12710
来自专栏Jack-Cui

150.Evaluate Reverse Polish Notation(Stack-Medium)

Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid...

209100
来自专栏noteless

[八]基础数据类型之Double详解

这些属性,看过浮点数简介的话,可以很清晰的理解,再次说明下,但凡本人的系列文章,全部都是有顺序的

1.2K10

扫码关注云+社区

领取腾讯云代金券