码迷,mamicode.com
首页 > 其他好文 > 详细

源码分析

时间:2019-07-31 18:22:23      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:math   err   nan   OLE   vat   不能   ash   short   override   

// 定义变量用来接收float值
private final float value;

// 构造函数,传入一个value
public Float(float value) {
this.value = value;
}
// 构造函数,传入一个double值
public Float(double value) {
this.value = (float)value;
}
// 构造函数,传入一个字符串
public Float(String s) throws NumberFormatException {
value = parseFloat(s);
}

// 判断是否是nan,这里永远为false
public boolean isNaN() {
return isNaN(value);
}

// 是否是无限的
public boolean isInfinite() {
return isInfinite(value);
}
// 将float数据转换成其它类型的数据
public String toString() {
return Float.toString(value);
}
public byte byteValue() {
return (byte)value;
}
public short shortValue() {
return (short)value;
}
public int intValue() {
return (int)value;
}
public long longValue() {
return (long)value;
}
public float floatValue() {
return value;
}
public double doubleValue() {
return (double)value;
}

// 获取hashCode值
@Override
public int hashCode() {
return Float.hashCode(value);
}

// 计算hashCode值
public static int hashCode(float value) {
return floatToIntBits(value);
}

// 比较两个float数据的大小
public boolean equals(Object obj) {
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}

// 将falot转换成int的byte值
public static int floatToIntBits(float value) {
int result = floatToRawIntBits(value);
// 根据位字段,最大指数和非零有效数的值检查NaN。
if ( ((result & FloatConsts.EXP_BIT_MASK) ==
FloatConsts.EXP_BIT_MASK) &&
(result & FloatConsts.SIGNIF_BIT_MASK) != 0)
result = 0x7fc00000;
return result;
}

// ?????????????????
public static native int floatToRawIntBits(float value);
public static native float intBitsToFloat(int bits);

// 比较两个float数据
public int compareTo(Float anotherFloat) {
return Float.compare(value, anotherFloat.value);
}

// 比较两个float数据
public static int compare(float f1, float f2) {
if (f1 < f2)
return -1;// val都不是NaN,this.value更小
if (f1 > f2)
return 1;// val都不是NaN,this.value更大
// 由于NaNs的可能性,不能使用floatToRawIntBits。
int thisBits = Float.floatToIntBits(f1);
int anotherBits = Float.floatToIntBits(f2);
return (thisBits == anotherBits ? 0 : // Values are equal
(thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
1)); // (0.0, -0.0) or (NaN, !NaN)
}
// 求和
public static float sum(float a, float b) {
return a + b;
}
// 求大值
public static float max(float a, float b) {
return Math.max(a, b);
}
// 求小值
public static float min(float a, float b) {
return Math.min(a, b);
}
private static final long serialVersionUID = -2671257302660747028L;
}
--------------------- 

源码分析

标签:math   err   nan   OLE   vat   不能   ash   short   override   

原文地址:https://www.cnblogs.com/hyhy904/p/11277907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!