• ベストアンサー

double を すべて bigdecimal

big decimalに直したいのですが・・・ doubleのところをbigdecimalに変えるだけじゃ動かないんですね。 当方、プログラムを勉強し始めて1か月の者です。 BigDecimal(double val)を使うのですか・・・? よろしくお願い致します。 class dentaku{ public static void main(String args[]){ double val1 = 0; /* 最初の数字 */ double val2 = 0; /* 次の数字 */ String ope; /* 演算子 */ double kekka; /* 結果を格納 */ if (args.length != 3){ errDisp("引数は3個入力して下さい"); } try{ val1 = Double.parseDouble(args[0]); val2 = Double.parseDouble(args[2]); }catch(NumberFormatException e){ errDisp("数値でない値が入力されています"); } ope = args[1]; String opeStr[] = {"kake", "waru", "tasu", "hiku"}; boolean errFlag = true; for (int i = 0 ; i < 4 ; i++){ if (ope.equals(opeStr[i])){ errFlag = false; } } if (errFlag == true){ errDisp("演算子は kake waru tasu hiku の4つです"); } if (ope.equals("kake")){ kekka = val1 * val2; }else if (ope.equals("tasu")){ kekka = val1 + val2; }else if (ope.equals("hiku")){ kekka = val1 - val2; }else{ if (val2 == 0){ errDisp("0 で割ろうとしました"); } kekka = val1 / val2; } System.out.println("入力された式は " + val1 + " " + ope + " " + val2 + " です"); System.out.println("計算結果は " + kekka + " です"); } private static void errDisp(String errStr){ System.out.println("Usage : java dentaku 数値 演算子 数値"); System.out.println(errStr); System.exit(0); /* プログラムを終了する */ } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

bigdecimalのJava-APIを熟読しましょう。 import java.math.BigDecimal; class Dentaku{ public static void main(String args[]){ BigDecimal val1 = null; BigDecimal val2 = null; String ope; /* 演算子 */ BigDecimal kekka; /* 結果を格納 */ if (args.length != 3){ errDisp("引数は3個入力して下さい"); } try{ val1 = new BigDecimal(args[0]); val2 = new BigDecimal(args[2]); }catch(NumberFormatException e){ errDisp("数値でない値が入力されています"); } ope = args[1]; String opeStr[] = {"kake", "waru", "tasu", "hiku"}; boolean errFlag = true; for (int i = 0 ; i < 4 ; i++){ if (ope.equals(opeStr[i])){ errFlag = false; } } if (errFlag == true){ errDisp("演算子は kake waru tasu hiku の4つです"); } if (ope.equals("kake")){ kekka = val1.multiply(val2); }else if (ope.equals("tasu")){ kekka = val1.add(val2); }else if (ope.equals("hiku")){ kekka = val1.subtract(val2); }else{ if ( val2.compareTo(new BigDecimal(0)) == 0 ){ errDisp("0 で割ろうとしました"); } kekka = val1.divide(val2); } System.out.println("入力された式は " + val1 + " " + ope + " " + val2 + " です"); System.out.println("計算結果は " + kekka + " です"); } private static void errDisp(String errStr){ System.out.println("Usage : java dentaku 数値 演算子 数値"); System.out.println(errStr); System.exit(0); /* プログラムを終了する */ } }

noname#89508
質問者

お礼

ご丁寧に書いて頂いて、ありがとうございます。 もっと勉強しないといけないですね。 ありがとうございました。

その他の回答 (1)

回答No.2

doubleはプリミティブな型で、 BigDecimalはオブジェクトです。 doubleをDoubleにしたって動きませんよね? それと同じです。 doubleの値をBigDecimalにするには、 BigDecimal(double val) を使います。 演算はBigDecimalにあるメソッドを使います。 例) double d1 = 11.111; double d2 = 22.222; BigDecimal bd1 = new BigDecimal(d1); BigDecimal bd2 = new BigDecimal(d2); BigDecimal addresult = bd1.add(bd2); その他の計算方法についてはJavaDocを見てください。

noname#89508
質問者

お礼

>doubleはプリミティブな型で、 >BigDecimalはオブジェクトです。 そうなんですか!!知識不足ですね・・・ ありがとうございます。JavaDocもみて勉強してみます。

関連するQ&A