[解決済み] 精度を落とさずにfloatをdoubleに変換する
2022-02-04 15:16:39
質問
プリミティブなfloatがあり、プリミティブなdoubleとして必要です。単にfloatをdoubleにキャストすると、変な精度になります。例えば
float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
しかし、キャストする代わりに float を文字列として出力し、その文字列を double としてパースすると、望みのものが得られます。
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
Stringまで往復するよりも良い方法はないでしょうか?
どのように解決するのですか?
あなたが
実は
それは、floatが元々目指していた数値を正確に表現していなかったからです。ダブルは
は
は元のfloatを正確に表現しています。
toString
は、すでに存在していた "extra" データを表示しています。
たとえば、(この数字は正しいものではなく、私が勝手に作ったものですが)次のようなものがあったとします。
float f = 0.1F;
double d = f;
では
f
はちょうど0.100000234523になるかもしれません。
d
はまったく同じ値ですが、文字列に変換するときに、より高い精度で正確であることを信頼し、それほど早く四捨五入しないので、すでに存在していたにもかかわらず隠されていた余分な桁が見えることになります。
文字列に変換して戻すと、元のfloat値よりも文字列値に近いdouble値になってしまいますが、これは良いことだけです。 もし は、文字列の値が本当に欲しいものであると信じているのです。
ここで使用する型は、float/double で間違いないでしょうか?
BigDecimal
? もし、小数点以下の正確な値を持つ数値(例えば、お金)を使おうとしているのなら
BigDecimal
の方がより適切な型であると思います。
関連
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] 通貨を表すのにDoubleやFloatを使ってはいけないのですか?
-
[解決済み] HTML5でfloat入力タイプはありますか?
-
[解決済み] C#でDecimalをDoubleに変換する方法は?
-
[解決済み] JavaScriptで浮動小数点数の精度を扱うには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】Javaの".class期待値"
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】予期しない型エラー
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。