1. ホーム
  2. Java

Java の double データ型における 0.0 と -0.0 の問題

2022-02-21 09:53:16
<パス

ダブルデータ型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));

出力は以下のとおりです。

true
1
false
2
-0.0
0.0

0.0と-0.0がコレクション内に存在する場合、オートボックスにより絶対値が等しい2つのデータがコレクション内に配置されると、不等な動作をするようになります。
回避策
取得した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

1