文字列を数値に変換する
NumberFormat classやDecimalFormat classを使ってフォーマットされた数値(文字列)を数値に変換できます。
import java.text.*;
import java.math.*;
class ExamDecimalParse {
public static void main(String[] args) {
// getting default locale
DecimalFormat df
= (DecimalFormat)DecimalFormat.getInstance();
try {
Long L1 = (Long)df.parse("12,345");
Long L2 = (Long)df.parse("54,321");
int i1 = L1.intValue() + L2.intValue();
System.out.println(i1);
} catch(ParseException pe) {
System.out.println(pe);
}
}
}
class ExamDecimalParse2 {
public static void main(String[] args) {
// getting default locale
DecimalFormat df
= (DecimalFormat)DecimalFormat.getInstance();
try {
Double d1 = (Double)df.parse("12,345.04");
Double d2 = (Double)df.parse("54,321.67");
double d3 = d1.doubleValue() + d2.doubleValue();
System.out.println(d3);
} catch(ParseException pe) {
System.out.println(pe);
}
}
}
class ExamDecimalParse3 {
public static void main(String[] args) {
// getting default locale
DecimalFormat df
= (DecimalFormat)DecimalFormat.getInstance();
try {
Double d1 = (Double)df.parse("12,345.04");
System.out.println(d1);
// case1 : value of doubleValue()
BigDecimal bd = new BigDecimal(d1.doubleValue());
System.out.println(bd);
// case2 : value of toString()
BigDecimal bd1 = new BigDecimal(d1.toString());
System.out.println(bd1);
Double d2 = (Double)df.parse("54,321.67");
BigDecimal bd2 = new BigDecimal(d2.toString());
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3);
} catch(ParseException pe) {
System.out.println(pe);
}
}
}
<実行結果>
| ExamDecimalParse | コンソール画面に 66666 と表示されます。 DecimalFormat.getInstance メソッドで自国の表記書式に対応したNumberFormat Instanceを入手し、。 その後、DecimalFormat classにcast(型変換)しています。 Parseメソッドを使えば、文字列を数値に変換することができます。 自国の表記書式に応じた、数字文字列をParseメソッドでLongに変換し、intValueメソッドでintを入手していますが、 longValueメソッドを使わなかったことには、特別な意図はありません。 |
| ExamDecimalParse2 | コンソール画面に 66666.70999999999 と表示されます。 このサンプルは小数点以下の数値の扱いを検証しています。 primitive type doubleは浮動小数点であるために、計算結果がコンソールの値になってしまいます。 日常的な計算や、事務処理計算ではこの答えはこまりますから、次にBigDecimalを使ってみました。 |
| ExamDecimalParse3 | コンソール画面に 12345.04 12345.0400000000008731149137020111083984375 12345.04 66666.71 と表示されます。 BigDecimalを使えば、正しく(日常の計算として)、小数点以下を計算できます。 doubleValueメソッドで入手したdoubleから、BigDecimalを生成すると、意図しない小数点以下の値が生成され、 ExamDecimalParse2と同じような結果になってしまいます。(同じ値ではありません。) toStringメソッドで入手したStringからBigDecimalを生成すると、正しく計算されました。 |
DecimalFormat classを使えば、数値をフォーマットし表示することが可能です。。