JavaでString型とBigDecimal型を変換する方法を解説

- システム
エンジニア - JavaでString型とBigDecimal型はどのように変換するのでしょうか。
- プロジェクト
マネージャー - JavaのString型とBigDecimal型について解説しますので、一緒に学んでいきましょう。
JavaでString型とBigDecimal型を変換する方法とは?
今回は、JavaでString型とBigDecimal型を変換する方法を紹介します。
Javaでは文字列を扱う型としてString型が、小数など細かな数値を扱う型としてBigDecimal型が用意されています。
プログラムで小数桁を含む数値を扱う際は、10進数を2進数に変換する過程でどうしても誤差(=丸め誤差)が出てしまいますが、JavaではBigDecimal型で扱うことで極力誤差を少なくすることが可能です。
そのため、String型で扱っている数値を四則演算等の計算で用いる場合、BigDecimal型に変換したうえで演算すると誤差の少ない計算結果が得られます。
数値をString型、BigDecimal型で相互に型変換することで、コンソール出力したり、正しい計算結果を求めたりと、それぞれの型の利点を活かせたプログラムが作成できます。JavaでString型とBigDecimal型の変換に興味のある方はぜひご覧ください。
JavaでString型とBigDecimal型を変換する方法
Javaで、String型とBigDecimal型を変換する方法について説明する前に、それぞれの型の特徴について簡単に紹介します。
String型とは「java.lang」パッケージに定義されている、主に文字列を扱う型です。同じく文字を扱う型にchar型がありますが、char型は1文字しか扱えないのに対し、String型では複数の文字を一つの変数で扱うことが可能です。Javaでは下記のように変数宣言します。
1 2 3 |
String str = "文字列"; |
文字をコンソールに出力したり、画面に表示したりする際に便利な型です。
一方でBigDecimal型は「java.math」パッケージに定義されている、主に数値を扱う型です。
Javaではdoubleやfloatという、小数を含む数値を扱う型が他にも用意されていますが、doubleやfloatでは計算時の丸め処理で誤差が生じてしまうため、数値計算する際は通常BigDecimal型を使います。Javaでは下記のように変数宣言します。
1 2 3 |
BigDecimal dcml = new BigDecimal("数値"); |
コンストラクタの引数に指定する数値はダブルクォーテーションで囲みましょう。囲まないと数値がint型と見なされ、特に小数桁を扱う際に誤差が生じてしまいます。
BigDecimal型からString型に変換する方法
BigDecimal型からString型に変換する方法を紹介します。
BigDecimal型からString型に変換するには、BigDecimal型で定義されているtoString()メソッドを使います。
1 2 3 |
String str = BigDecimal型.toString(); |
下記のサンプルは、BigDecimal型からString型へ変換するソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.*; import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { // 整数を文字列へ変換 BigDecimal dcml1 = new BigDecimal("999"); System.out.println(dcml1.toString()); // 小数を含む数値を文字列へ変換 BigDecimal dcml2 = new BigDecimal("999.999"); System.out.println(dcml2.toString()); // 小数を含む数値を文字列へ変換 BigDecimal dcml3 = new BigDecimal("0.0000001"); System.out.println(dcml3.toString()); } } |
実行結果は次のようにコンソール出力されます。
999
999.999
1E-7
999、999.999は問題なく変換できましたが、0.0000001を変換したら「1E-7」と出力されました。このように、数値の桁によっては指数変換されることがあります。「0.0000001」と出力したい場合はtoPlainString()メソッドを使うようにしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.*; import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { // toPlainString()メソッドで変換 BigDecimal dcml3 = new BigDecimal("0.0000001"); System.out.println(dcml3.toPlainString()); } } |
実行結果は次のようにコンソール出力されます。
0.0000001
String型からBigDecimal型に変換する方法
続いて、String型からBigDecimal型に変換する方法について紹介します。
下記のようにコンストラクタ宣言時に、引数に数値文字列を指定することでString型からBigDecimal型に変換できます。
1 2 3 |
BigDecimal dcml = new BigDecimal("数値文字列"); |
下記のサンプルは、数値文字列をBigDecimal型に変換するソースコードです。BigDecimal型に変換後、コンソール出力するためにString型へと再変換しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { // 整数をBigDecimal型に変換 String str1 = "999"; BigDecimal dcml1 = new BigDecimal(str1); System.out.println(dcml1.toString()); // 小数桁を含む数値をBigDecimal型に変換 String str2 = "999.999"; BigDecimal dcml2 = new BigDecimal(str2); System.out.println(dcml2.toString()); } } |
実行結果は次のようにコンソール出力されます。
999
999.999
小数桁を含む場合もBigDecimal型に変換できます。しかしカンマが付与された数値は変換時に例外エラーを引き起こすので注意しましょう。また、nullが指定されたString型の変数も変換時にNullPointerExceptionの例外エラーを引き起こしてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { // カンマが付与されている場合は変換時にエラー String str1 = "999,999,999"; BigDecimal dcml1 = new BigDecimal(str1); System.out.println(dcml1.toString()); // nullは変換時にエラー String str2 = null; BigDecimal dcml2 = new BigDecimal(str2); System.out.println(dcml2.toString()); } } |
そこで文字列のカンマを事前に除去したり、nullは0に変換したりするよう、エラーを起こさないように工夫しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { // カンマは除去する String str1 = "999,999,999"; BigDecimal dcml1 = new BigDecimal(str1.replace(",","")); System.out.println(dcml1.toString()); // nullはゼロとする String str2 = null; BigDecimal dcml2 = new BigDecimal(str2 != null ? str2 : "0"); System.out.println(dcml2.toString()); } } |
実行結果は次のようにコンソール出力されます。
999999999
0
- システム
エンジニア - JavaのBigDecimal型からString型に変換、また反対にString型からBigDecimal型に変換する方法などが理解できました。
- プロジェクト
マネージャー - 厳密な計算結果を求めるために便利なBigDecimal型とコンソールへの出力ができるString型をそれぞれ使い分けましょう。
JavaでString型とBigDecimal型を変換してみよう!
いかがだったでしょうか。JavaでString型とBigDecimal型を変換する方法について紹介しました。
BigDecimal型からString型へ変換するには、BigDecimal型で定義されているtoString()メソッド、もしくはtoPlainString()メソッドを使います。一方でString型からBigDecimal型へ変換するには、BigDecimal型のインスタンス作成時、引数にString型の数値を指定することで可能です。
Javaでは四則演算等で計算する際に、厳密な計算結果を求めるためBigDecimal型が便利です。また、コンソールへの出力時はString型が便利です。
それぞれの型の利点を理解し、必要に応じて型変換できるようにしましょう。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)