Javaのdouble型を扱う上で、String型やint型から変換するといった対応が必要なことがあります。たとえばテキストデータの数値を使ってdouble型の計算結果を得たい場合や、int型の数値からdouble型の計算結果を得たい場合などです。
この記事では、String型、int型とdouble型との型変換について、
- double型とは
- 一目でわかる変換一覧
- int⇔doubleの変換
- String⇔doubleの変換
- 型変換時のチェック方法
など具体的な内容についても解説していきます。今回はString型、int型とdouble型との型変換について、使い方をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
double型とは
double型は小数を扱えるデータ型の一つです。小数を扱えるデータ型としてはdouble型の他にfloat型があります。float型の有効桁数は約6~7桁の精度ですが、double型の有効桁数は15桁の精度とdouble型の方が精度が高くなります。
double型で小数を扱う場合として最初から変数に小数を代入する場合の他に、割り算の計算結果を扱う場合や、テキストデータの小数を計算に使用する場合などがあります。
割り算の計算結果を扱う場合にはint型からdouble型への変換が必要な場合があります。テキストデータの小数を計算に使用する場合にはString型からdouble型への変換が必要なとなります。
そこで、int型やString型とdouble型との型の変換について詳しく説明していきます!
一目でわかる変換一覧
まずString型、int型とdouble型との変換について表にまとめました。
変換前の型 | 変換後の型 | 書き方例 |
---|---|---|
int | double | (double)1 |
double | int | (int)1.0 |
String | double | Double.parseDouble("1.0") |
double | String | String.valueOf(1.0) |
String(小数点表記) | BigDecimal.valueOf(0.00012).toPlainString(); | |
String(小数点以下の桁数の指定) | String.format("%1$.3f", 12.34567); |
Javaでは小数点以下の桁数が多い場合、指数表記で「E」などの文字列が含まれてしまいます。例えば、double型の値0.00011を出力すると、1.1E-4と省略して表示されます。そのため、double型をそのままString型へ変換しても文字列として”1.1E-4”で変換されてしまいます。
この問題を解決するためには、java.math.BigDecimalクラスのvalueOfメソッドを使います。またStringクラスのformatメソッドを使って小数点以下の桁数の指定を行うことができます。それでは、それぞれの詳しい内容についてサンプルコードで確認しながらみていきましょう!
int⇔doubleの変換
int型とdouble型との変換にはキャストを行います。キャストとは、データ型を変換することをいいます。キャストの記述方法は下記のように数値もしくは変数の前に変換したいデータ型名を()で囲んで記述します。
キャストの記述例:
(データ型)式
int型からdouble型へのキャスト記述例:
(double)1
double型からint型へのキャスト記述例:
(int)1.0
それではint型とdouble型との変換について詳しくみていきましょう!
int→double変換
int型からdouble型への変換はint型同士で割り算を行う場合などによく使われます。int型同士でそのまま割り算を行うと計算結果の小数点以下が切り捨てられますので注意が必要です。
int型同士で割り算を行う場合は、少なくともどちらか一方のint型の数値または変数をdouble型にキャストします。それではサンプルコード確認しましょう。
public class Main { public static void main(String[] args) { int a = 1; int b = 2; // int型同士の割り算 double c = a / b; System.out.println(c); // int型をdouble型へキャストして割り算 c = (double)a / b; System.out.println(c); } }
実行結果:
0.0 0.5
このサンプルコードでは、1つ目にint型の変数同士で割り算を行っています。計算結果は0.5になるはずですが、実行結果を確認すると0.0と小数点以下が切り捨てられています。
2つ目はint型変数aをdouble型にキャストして割り算を行っています。実行結果を確認すると0.5と得たい結果が出力表示されていることがわかります。
double→int変換
double型からint型への変換についても確認しておきましょう。double型からint型への変換についてもキャストを行いますが、キャストの際に小数点以下が切り捨てられますので注意する必要があります。
サンプルコードで確認していきましょう。
public class Main { public static void main(String[] args) { double a = 1.0; double b = 0.5; // double型からint型への変換 int c = (int)a; System.out.println(c); // int型への変換で小数点以下切り捨て c = (int)b; System.out.println(c); } }
実行結果:
1 0
このサンプルコードでは、1つ目にdouble型の変数aをint型へキャストしています。変数aの小数点以下はゼロですのでint型へキャストしても問題ありませんが、2つ目のdouble型変数bは小数点以下にゼロ以外の数値5が記述されています。
これをint型へキャストすると、実行結果からわかるように小数点以下が切り捨てられています。このようにdouble型をint型へ変換する場合は小数点以下が切り捨てられますので注意しましょう!
String⇔doubleの変換
ここでは、String型とdouble型の相互変換の方法を、詳しく説明します。
String→double変換
String型からdouble型へ変換するためには、parseDoubleメソッドを使用します。double型を指定して、parseDoubleメソッドの引数にString型を指定することで、double型へ変換することができます。
以下にString型からdouble型へ変換する方法を記述します。
public class Main { public static void main(String[] args) throws Exception { String str = "100"; double db = Double.parseDouble(str); System.out.println("db : " + db); } }
実行結果:
db : 100.0
このサンプルコードでは、String型を宣言して値を設定し、double型を宣言してparseDoubleメソッドで引数にString型の変数を指定しています。
String型配列からdouble型配列への変換
また、String型の配列からdouble型への配列へ型変換する場合も、同様にparseDoubleメソッドを使用して変換することができます。
以下に、配列同士のString型からdouble型への変換方法のサンプルを記述します。
public class Main { public static void main(String[] args) throws Exception { String[] str = {"100.1", "200.1", "200.2"}; double[] db = new double[str.length]; for(int i=0; i<str.length; i++) { db[i] = Double.parseDouble(str[i]); System.out.println("db[" + i + "] : " + db[i]); } } }
実行結果:
db[0] : 100.1 db[1] : 200.1 db[2] : 200.2
double→String変換
double型からString型へ変換するためには、valueOfメソッドを使用します。Stringの型を指定してvaluOfメソッドの引数にdouble型を指定することで、String型へ変換することができます。
以下にdouble型からString型へ変換する方法を記述します。
public class Main { public static void main(String[] args) throws Exception { double db = 100; String str = String.valueOf(db); System.out.println("str : " + str); } }
実行結果:
str : 100.0
このサンプルコードではdouble型を宣言して値を設定し、String型を宣言してvalueOfメソッドで引数にdouble型の変数を指定しています。valueOfメソッドを使用することで、指定した型へ変換することが可能です。
指数表記の変換(BigDecimalクラスの使用)
Javaでは小数点以下の桁数が多い場合、指数表記で「E」などの文字列が含まれてしまいます。例えば、double型の値0.00011を出力すると、1.1E-4と省略して表示されます。そのため、double型をそのままString型へ変換しても文字列として”1.1E-4”で変換されてしまいます。
この問題を解決するためには、java.math.BigDecimalクラスを使うことで解決することができます。以下にBigDecimalクラスを使用した、double型からString型への変換方法を記述します。
import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { double db = 0.00011; System.out.println("db : " + db); String str = BigDecimal.valueOf(db).toPlainString(); System.out.println("str : " + str); } }
実行結果:
db : 1.1E-4 str : 0.00011
このサンプルコードではdouble型を宣言し、0.00011を設定しています。設定した変数を出力すると、指数表記で1.1E-4で表示されてしまいます。
指数表記での出力を避けるためには、String型を宣言したあとに、BigDecimalクラスのvalueOf(double).toPlainStringメソッドを使用し、valueOfの引数にdouble型の変数を指定します。
実行結果を確認すると、指数表記で省略されずに変換されていることがわかります。
小数点以下を指定して変換
double型からString型へ変換時に、double型の小数点以下の桁数を指定して変換したい場合はformatメソッドを使用します。formatメソッドは以下のフォーマットで指定します。
format(%[index$][フラグ][幅][.精度]型)
以下にformatメソッドを使用した、double型からString型への変換方法を記述します。
public class Main { public static void main(String[] args) throws Exception { double db = 100.123456789d; String str = String.format("%1$.5f", db); System.out.println("str : " + str); } }
実行結果:
str : 100.12346
このサンプルコードではdouble型を宣言し、小数点以下の桁数が多い値を設定しています。
String型を宣言してdouble型を変換するときに、formatメソッドを使用し、引数にインデックス番号、指定桁数、double型の変数を指定しています。実行結果を確認すると、小数点以下の桁数が指定したとおりとなっていることがわかります。
なお、桁の最後が6となっているのは、最後の桁はまるめられてしまうためです。
型変換時のチェック方法
String型からdouble型へ変換時に、指定した文字列が数値以外の場合、”java.lang.NumberFormatException”の例外が発生してしまいます。
以下に、try~catchを使用して、例外が発生しても処理を継続させる方法を記述します。
public class Main { public static void main(String[] args) throws Exception { String str = "apple"; try{ double db = Double.parseDouble(str); }catch (NumberFormatException ex){ System.out.println(ex); } } }
実行結果:
java.lang.NumberFormatException: For input string: "apple"
このサンプルコードではString型を宣言し、数値以外の文字列を設定しています。try~catch文を記述し、tryの中でString型からdouble型へ変換する処理を記述しています。tryの中で例外が発生すればcatchに処理が入りますので、処理を継続することができます。
Stringの使い方の総まとめ記事はこちら
Stringのさまざまな使い方についてはこちらで詳しく解説しているので、ぜひ確認してください!
まとめ
String型やint型とdouble型との変換について基本的な方法や指数からの変換、小数点以下を指定しての変換方法などを説明しました。String型やint型とdouble型との変換には、さまざまな指定方法や注意点があります。
もし、String型やint型とdouble型との型変換の方法を忘れてしまったら、この記事を思い出してくださいね!