こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。
この記事では、 JavaのBigDecimalの生成と初期化について
- BigDecimalの生成と初期化のやり方
- BigDecimalの生成と初期化のサンプルプログラム
と、丁寧に解説していきます。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
IntelliJ IDEAのエディション | Community(無料版) |
IntelliJ IDEAのバージョン | 2021.3.2 |
プロジェクト | Javaプロジェクト |
SDK | Oracle OpenJDK version17.0.2 |
Javaを動かすためにIntelliJ IDEAを使っています。
IntelliJ IDEAのインストールは、下の記事をご参考ください。
BigDecimalの生成と初期化のやり方
前提として、BigDecimalを扱うために
1 |
import java.math.BigDecimal; |
をインポートする必要があります。
BigDecimalの生成と初期化のやり方は
- コンストラクタで生成と初期化
- BigDecimal.valueOfメソッドで生成と初期化
の2つあるので、それぞれを解説していきます。
やり方その1:コンストラクタで生成と初期化
コンストラクタで生成と初期化を解説します。
使い方サンプルは以下になります。
1 |
BigDecimal 【変数名】 = new BigDecimal(【初期値】); |
【初期値】には
- int型
- double型
- long型
- BigInteger型
- String型
の値を設定できます。
コンストラクタで生成と初期化をするとき、注意点が2点あります。
1点目は、double型を引数に与えると誤差が発生する点です。
1 2 |
BigDecimal sample = new BigDecimal(1.1); System.out.println(sample); |
として実行した場合
1 |
1.100000000000000088817841970012523233890533447265625 |
と誤差が発生してしまいます。
もしdouble型の値をBigDecimal型の初期値に与えたい場合は、やり方その2の「BigDecimal.valueOfメソッド」を使うと誤差がありません。
2点目は、数値に変換できないString型は例外が発生する点です。
1 |
BigDecimal sample = new BigDecimal("aaa"); |
というように引数に数値に変換できない文字列を指定した場合、コンパイルは通るものの実行すると
1 |
Exception in thread "main" java.lang.NumberFormatException |
という例外が発生します。
コンストラクタで生成と初期化するときは、上記2点に注意です。
やり方その2:BigDecimal.valueOfメソッドで生成と初期化
BigDecimal.valueOfメソッドで生成と初期化を解説します。
使い方サンプルは以下になります。
1 |
BigDecimal.valueOf(【変換したいdouble型またはlong型】) |
BigDecimal.valueOfメソッドについては、別記事で詳しく解説しているのでこちらをご参考ください。
では、次の章で実際に使ってみます。
BigDecimalの生成と初期化を解説するプログラムの概要
BigDecimalの生成と初期化を解説するプログラムでは
- コンストラクタ(double型)
- コンストラクタ(String型)
- BigDecimal.valueOfメソッド
の3パターンでBigDecimalの生成と初期化し、それぞれの値を表示させます。
解説で使うJavaプログラムは、Sampleプロジェクトのsampleパッケージ内にある、とします。
Javaサンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package sample; import java.math.BigDecimal; public class Sample { public static void main(String[] args) { System.out.println("■BigDecimalの生成と初期化サンプル"); double initializeConstructorBefore = 10.1; BigDecimal initializeConstructorAfter = new BigDecimal(initializeConstructorBefore); System.out.println("・コンストラクタ(double型)"); System.out.println("初期化前:" + initializeConstructorBefore); System.out.println("初期化後:" + initializeConstructorAfter); String initializeConstructorStringBefore = "10.1"; BigDecimal initializeConstructorStringAfter = new BigDecimal(initializeConstructorStringBefore); System.out.println("・コンストラクタ(String型)"); System.out.println("初期化前:" + initializeConstructorStringBefore); System.out.println("初期化後:" + initializeConstructorStringAfter); double initializeBefore = 10.1; BigDecimal initializeAfter = BigDecimal.valueOf(initializeBefore); System.out.println("・BigDecimal.valueOfメソッド"); System.out.println("初期化前:" + initializeBefore); System.out.println("初期化後:" + initializeAfter); } } |
実行結果
Javaプログラムを実行します。
実行のやり方は
- プログラムを右クリックして実行
- 実行タブから実行
- ガターから実行
の3種類あるので、いずれかで実行します。
詳しい解説は以下の記事をご参考ください。
1 2 3 4 5 6 7 8 9 10 |
■BigDecimalの生成と初期化サンプル ・コンストラクタ(double型) 初期化前:10.1 初期化後:10.0999999999999996447286321199499070644378662109375 ・コンストラクタ(String型) 初期化前:10.1 初期化後:10.1 ・BigDecimal.valueOfメソッド 初期化前:10.1 初期化後:10.1 |
BigDecimal型に生成と初期化できていることが確認できました。
まとめ:BigDecimalの生成と初期化をやってみよう!
以上がJavaのBigDecimalの生成と初期化についての解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント