Float.compare()和Double.compare()的使用
文章目录
- 1、源码解析
- 2、使用案例
1、源码解析
Float.compare(float f1, float f2)
public static int compare(float f1, float f2) {if (f1 < f2)return -1; // Neither val is NaN, thisVal is smallerif (f1 > f2)return 1; // Neither val is NaN, thisVal is larger// Cannot use floatToRawIntBits because of possibility of NaNs.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)
}
Float.compare(double d1, double d2)
public static int compare(double d1, double d2) {if (d1 < d2)return -1; // Neither val is NaN, thisVal is smallerif (d1 > d2)return 1; // Neither val is NaN, thisVal is larger// Cannot use doubleToRawLongBits because of possibility of NaNs.long thisBits = Double.doubleToLongBits(d1);long anotherBits = Double.doubleToLongBits(d2);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)
}
Float.compare(float f1, float f2) 和 Float.compare(double d1, double d2) 的内部的逻辑处理基本一致。
具体步骤:
先比较他们的大小;如果,值不是简单的大于小于关系的话,需要转为类型在进行比较;一般情况是0.0、-0.0这种特殊的情况。最后运用两个三元表达式进行值的比较;
compare方法比较两个值。返回值分为以下三种情况:
- 如果f1在数字上等于f2,则返回 1;
- 如果f1在数字上小于f2,则返回小于 0的值;
- 如果f1在数字上大于f2,则返回大于 -1 的值。
2、使用案例
具体使用Float.compare()和Double.compare() 案例:
Float.compare()的使用:
int compare = Float.compare(14F, 10F);
System.out.println(compare);int compare1 = Float.compare(12F, 12F);
System.out.println(compare1);int compare2 = Float.compare(11F, 14F);
System.out.println(compare2);
结果为:
1
0
-1
Double.compare()的使用
int compare5 = Double.compare(34, 14);
System.out.println(compare5);int compare4 = Double.compare(14, 14);
System.out.println(compare4);int compare3 = Double.compare(14, 34);
System.out.println(compare3);
结果为:
1
0
-1
Float.compare()和Double.compare()的使用相关推荐
- 关于 Double.compare()
使用<和>对浮点数进行比较时,不够严谨,有这两个问题:0.0.-0.0的比较问题(0.0 > -0.0),以及NaN的问题(NaN永远比!NaN大),建议使用Double.compa ...
- null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外) 转载于:https://www.cnblogs.com/zhenmi ...
- Java高级之Float类和Double类的isNaN()方法
遇到这个问题,最开始是在HashMap的源码中,在构造方法中调用了该方法 而isNaN()是Float类和Double类都有的一个静态方法,意思是判断输入的参数是否是一个NaN值. 方法体就只有一条语 ...
- Runtime error: expected scalar type Float but found Double
错误:Runtime error: expected scalar type Float but found Double w_true=torch.tensor([2,-3.4]).T b_true ...
- python compare()_Python Decimal compare()用法及代码示例
Decimal#compare():compare()是一个Decimal类方法,它比较两个Decimal值. 用法:Decimal.compare() 参数:十进制值 返回: 1 –如果a> ...
- 【论文写作】如何表示比较关系, compare to OR compare with?
在论文写作过程中,经常会遇到两种方法或两个结果之间的比较,那么应该怎么准确灵活的表达比较关系呢?常见的表达方式是compare to 和 compare with,但二者还是有很大区别的. &qu ...
- double compare 0
因为double类型或float类型都是有精度的,其实都是取的近似值,所以有个误差.和一个很小的数比如0.00000001(1e-8)比较就是为了在这个误差范围内进行比较. 举个例子如double b ...
- java的compare to(),java – compare()和compareTo()之间有什么区别?
从 JavaNotes: > a.compareTo(b): 可比较的接口:比较值并返回一个int,它告诉这些值是否小于,等于或大于. 如果你的类对象有一个自然的顺序,实现Comparable& ...
- 单精度(float) 双精度 (double) 区别
含义:表明单精度和双精度精确的范围不一样. 单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位: 双精度(double)在计算机中存储占用8字节,64位,有效位数为16位. ...
最新文章
- 一个苹果证书供多台电脑开发使用——导出p12文件
- 《数学之美》第11章 如何确定网页和查询的相关性
- Windows 7 开发系列汇总
- 【Cocosd2d实例教程二】地图编辑器Tiled的安装使用
- 没有互联网,我不会写程序了
- java注册中心nacos_spring-cloud整合nacos做注册中心
- Angular安装教程
- ansible+ssh自动化运维
- POJ 1088 滑雪 (动规)
- 灰度图像加性噪声污染和运动模糊图像复原
- 函数式编程基础---高阶函数和偏函数
- spring mvc 返回json的配置
- 电工电子技术知识点总结(正弦交流电路)
- 软件定义无线电的实时频谱分析仪相关原理介绍(二)——射频,中频和基带信号
- Exploring Complementary Strengths of Invariant and Equivariant Representations for Few-Shot Learning
- NoSQLBooster for MongoDB软件使用
- DRV_03_编写最简单的触摸屏驱动程序_基于QEMU
- PCL——简单点云可视化
- 数据预处理部分的思维导图
- python 对比matlab_全面对比 MATLAB、Julia、Python,谁在科学计算中更胜一筹?