[解決済み] BigDecimal - newまたはvalueOfを使用する。
質問
double dからBigDecimalオブジェクトを取得する方法を2つ見つけました。
-
new BigDecimal(d)
-
BigDecimal.valueOf(d)
どちらが良い方法なのでしょうか?それは
valueOf
は新しいオブジェクトを作成するのでしょうか?
一般的に(BigDecimalに限らず)、newとvalueOfのどちらが推奨されますか?
どのように解決するのですか?
これらは2つの別々の質問です: "私は何を使用する必要があります。
BigDecimal
と、「一般的にはどうすればいいのでしょうか?
について
BigDecimal
: これは少しやっかいです。
は同じことをするわけではありません。
.
BigDecimal.valueOf(double)
は
正規の
String
表現
の
double
のインスタンスを作成するために渡された値です。
BigDecimal
オブジェクトのインスタンス化に渡される値です。言い換えれば の値は
BigDecimal
オブジェクトの値は、あなたが
System.out.println(d)
.
もしあなたが
new BigDecimal(d)
を使用すると
BigDecimal
を表現しようとします。
double
値
をできるだけ正確に表現しようとします。
. これは
通常
を使用すると、必要以上に多くの桁が保存されることになります。厳密に言えば、これは
valueOf()
よりも正しいですが、直感的にはかなり劣ります。
これについては、JavaDocに素敵な説明があります。
このコンストラクタの結果は、多少予測できないことがあります。ある人は
new BigDecimal(0.1)
を書くと、Java ではBigDecimal
を作成します。これは正確に 0.1 (スケールされていない値で、スケールが 1) に等しいのですが、実際には 0.100000000000055511151231257827021181583404541015625 に等しいのです。これは、0.1を正確に表すことができないためです。double
(として表現することができないからです(それどころか、任意の有限長の2進小数としても)。したがって、コンストラクタに渡される値は、見かけによらず 0.1 と正確に等しくはありません。
一般的には
が同じであれば
(の場合ではない)。
BigDecimal
の場合ではなく、他のほとんどの場合)、その場合
valueOf()
の方が望ましいと思います: 共通の値をキャッシュすることができます (
Integer.valueOf()
で見られるように)、呼び出し元を変更することなくキャッシュの挙動を変更することもできます。
new
は
常に
は、必要でない場合でも、新しい値をインスタンス化します(最良の例です。
new Boolean(true)
vs.
Boolean.valueOf(true)
).
関連
-
[解決済み] Double vs. BigDecimal?
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
ApplicationContextの起動エラーです。条件レポートを表示するには、アプリケーションを'de'で再実行します。
-
ジャバアレイ
-
Javaがテキストファイルを読み込む
-
アノテーション「@Retention」の役割
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
アクセス制限の解決方法: ---- in Java
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。