文字列を数値に変換する


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を使えば、数値をフォーマットし表示することが可能です。。