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
関連
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
Jsoup-Crawlingの動作
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
無効なメソッド宣言
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
SocketException java.netの4つの例外解決策。
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
-bash: java: コマンドが見つからない 解決方法
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
Junitのユニットテストエラー
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
ApiModel と @ApiModelProperty の使用法
-
Javaジェネリックの深い理解
-
Java上級(XLVI) ArrayList、Vector、LinkedListの類似点と相違点を簡単に説明できる。
-
MySQLIntegrityConstraintViolationException、解決方法