Java double数据类型中的0.0和-0.0问题

来源:互联网 发布:香水小样 知乎 编辑:程序博客网 时间:2024/05/18 20:51

在写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

具体参考:
http://www.programgo.com/article/4441958781/

原创粉丝点击