Java double/float数据类型中的0.0和-0.0问题
来源:互联网 发布:麦子学院 python 彭亮 编辑:程序博客网 时间:2024/06/06 14:05
在写LeetCode的时候,一个题目需要计算两两点之间的斜率,使用double类型数据保存的时候,已经有预感到了精度的问题了,自己认为理论上在一次计算中,对于同一个double值如0.5,在同一个计算机类数据表示形式是一样的,可以忽略不计,但是实际中遇见的是double数据类型0.0和-0.0的比较问题。
System.out.println(0.0 == -0.0);System.out.println(Double.compare(0.0, -0.0));System.out.println(new Double(0.0).equals(new Double(-0.0)));Map<Double, Integer> map = new HashMap<>();map.put(0.0, 1);map.put(-0.0, 2);System.out.println(map.size());System.out.println((double)(2-2)/(1-2));System.out.println((double)(3-3)/(2-1));
输出结果如下所示:
true1false2-0.00.0
在集合中遇见0.0和-0.0时,由于自动装箱,导致两个在绝对数值上相等的数据,放入集合时表现出不相等。
解决办法:
对获得的double类型数据加上一个0.0
Map<Double, Integer> map = new HashMap<>();map.put(0.0, 1);map.put(-0.0+0.0, 2);System.out.println(map.size());
1
PS:对于float类型也是一样,jdk上的解释:
有以下两种例外情况:
- 如果 f1 和 f2 都表示 Float.NaN,那么即使 Float.NaN==Float.NaN 的值为 false,equals 方法也将返回 true。
- 如果 f1 表示 +0.0f,而 f2 表示 -0.0f,或相反,那么即使 0.0f==-0.0f 的值为 true,equal 测试也将返回 false。
该定义使得哈希表得以正确操作。
具体参考:
http://www.programgo.com/article/4441958781/
http://blog.csdn.net/ouy5933/article/details/72461239
阅读全文
0 0
- Java double/float数据类型中的0.0和-0.0问题
- Java double数据类型中的0.0和-0.0问题
- JAVA基本数据类型范围和float、double精度问题
- java中的float和double
- Java中的Float和double
- Java中的float和double
- java中的double和float数据精度
- java中数据类型double&float
- java float和double精度问题
- float和double 的精度缺失问题以及在Java中的解决办法
- ACM中的Float和Double
- Java中的浮点型(Double&amp;Float)计算问题
- Java中的浮点型(Double&Float)计算问题
- Java中的浮点型(Double&Float)计算问题
- Java中的浮点型(Double&Float)计算问题
- Java中的浮点型(Double&Float)计算问题
- float 和 double 精度问题
- float和double精度问题
- ViewPager网络请求图片并无限轮播
- android.content.res.Resources$NotFoundException: String resource ID #0x1
- java学习日志 函数的两个明确
- java进阶之路
- js oop之继承
- Java double/float数据类型中的0.0和-0.0问题
- 快速实现图片点击放大缩小,支持url
- Lua Table的四种遍历方式
- 对ajax的二次封装,返回接收到的数据
- 【大话数据结构】特殊线性表:栈与队列
- R-2R”T“形电阻网络D/A转换公式推导
- 使用EasyDrawin进行简单直播
- HashMap HashTable和CurrentHashMap的区别
- 安卓 Int和Integer的区别之处,以及其他的八个区别