DoubleからBigDecimalへの変更の仕方

このQ&Aのポイント
  • DoubleからBigDecimalへの変更方法について説明します。
  • 以下のソースコードを参考に、double型をBigDecimal型に変更する方法を解説します。
  • 変更後のソースコードは、計算精度を向上させることができます。
回答を見る
  • ベストアンサー

DoubleからBigDecimalへの変更の仕方

以下のソースをdouble使用箇所をBigDecimalに変更して行いたいのですが・・・ public String test( String str1, String str2){ // 計算方法: // str1 / str2 の小数点第3位切り上げ後に100掛け // 割り算を行う double d = Double.valueOf(str1).doubleValue()/Double.valueOf(str2).doubleValue(); // 掛け算を行う d = d*100; // 小数点第1位切り上げる if (d >= 10.88) { d = 11; } DecimalFormat ff = new DecimalFormat("#0.0"); return ff.format(d); }

  • sting
  • お礼率12% (35/274)
  • Java
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • thelma
  • ベストアンサー率66% (20/30)
回答No.1

数値計算にはあまり詳しくないのですが、、、 BigDecimalのjavadocを見る限り、 doubleからの変換→new BigDecimal(double) 掛け算→multiply() 割り算→divide() このクラスでいけそうな気もします。 # チェック済みですか?

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/math/BigDecimal.html

関連するQ&A

  • double型の減算がうまくいかない

    Java初心者です。 今、Javaの勉強中で、double型の計算を行っています。 double型同士の減算を行った結果、思っていた結果と違う値が帰ってきたので、原因、もしくは解決方法をお教え頂ければと思います。 ソースは以下 public static void main(String[] args) { //値A double longitudeA = -73.98289; //値B double longitudeB = -73.98315; BigDecimal aDecimal = new BigDecimal(String.valueOf(longitudeA)); BigDecimal bDecimal = new BigDecimal(String.valueOf(longitudeB)); //減算 BigDecimal decimal = aDecimal.subtract(bDecimal); //小数点以下第5位で四捨五入し、出力 System.out.print(decimal.setScale(5, RoundingMode.HALF_UP).doubleValue()); } 出力される値として、 0.00026 を想定していたのですが、実際に出力されたのは 2.6E-4 でした。 BigDecimalのオブジェクトをそのまま出力すると想定通りの結果が出力されます。 一回Stringに型変換を行った後、Double#parseDoubleを行ったりしてみたのですが、 どうも思った通りの出力がされません。 解決策をお教え頂ければと思います。 よろしくお願いします。

  • BigDecimal小数計算について

    プログラミングに関する知識が皆無の初心者です。 「はじめてのandroidアプリプログラミング」という本に従って電卓のアプリを作っているのですが、小数点を含む計算ができず、困っております。 演算記号前の数字が小数で、演算記号後の数字が整数であるならば 1.5*2=3 と正しく計算ができますが、 演算記号後が小数点を含む数だと、計算されず演算記号後に入力した数字が 2*1.5=1.5 と、そのまま表示されてしまいます。 小数の表示は if (mOp == R.id.button_decimal || mCalcValue.scale() != 0) {  // 小数点を含む場合  BigDecimal bd = new BigDecimal(BigInteger.valueOf(value),mCalcValue.scale() + 1);  mCalcValue = mCalcValue.add(bd); } else {  // それ以外の場合  // 10倍  mCalcValue = mCalcValue.multiply(BigDecimal.TEN);  // 足す  mCalcValue = mCalcValue.add(new BigDecimal(value)); } で、 イコールを押したときの動作は public void onEqualClick(View view) {  switch (mOp) {   case R.id.button_plus:   // 足し算   mCalcValue = mPreValue.add(mCalcValue);   break;   case R.id.button_subtract:   // 引き算   mCalcValue = mPreValue.subtract(mCalcValue);   break;   case R.id.button_multiply:   // かけ算   mCalcValue = mPreValue.multiply(mCalcValue);   break;   case R.id.button_divide:   // 現在の値が0ではないかチェック   if (!BigDecimal.ZERO.equals(mCalcValue)) {    // 割り算    mCalcValue = mPreValue.divide(mCalcValue, 11,    BigDecimal.ROUND_HALF_UP);   }  break; } です。 どこのコードが原因かもわからず、どこを質問文に掲示すればアドバイスいただきやすいかもわからなかったため、質問文に不足あるかもしれません。 すみませんがよろしくお願いします。

    • ベストアンサー
    • Java
  • 計算する度にBigDecimalオブジェクト作成?

    javaのDouble型の足し算をするには、BigDecimalを使わなければ 正確な数値が得られない、ということで使用したのですが、 毎回、小数点の足し算をする度に、 負荷のかかるnew宣言でBigDecimalのインスタンスを作りaddメソッドで計算するというはどうも非効率に思ってしまうのです、、; javaでの小数点の足し算は皆さん通常どうやっているのでしょうか?

    • ベストアンサー
    • Java
  • 少数50桁以上を表示するには

    小数点以下の第50位を計算結果として表示させたいのですが、うまくいきません。 今は BigDecimal BD = new BigDecimal("0.000・・・・"); double d; ----計算---- BD = new BigDecimal(d); ----表示---- として、表示させているのですが47桁くらいで終わってしまいます。 どうしたらいいのでしょうか。 情報が曖昧すぎますが、わかる方教えてください。

    • ベストアンサー
    • Java
  • 有効数字

    import java.lang.Math; public class NewtonMethod { public static void main(String args[]){ double x = 0.785; while (true){ double x2 = x * 2; double xN = x - (Math.cos(x2) - x2 + 1)/(- 2 * Math.sin(x2) - 2); if (xN >= x){ break; } x = xN; } System.out.println(x); } } このソースコードの求められたxを有効数字6桁で求めたいのですがどうすればいいのでしょうか? BigDecimal bi = new BigDecimal(String.valueOf(x)); x =bi.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue(); というのをどこかに入れればいいというところまではわかりましたが、さっきから実行してもうまくいきません; どなたか助けてください。よろしくお願いします。

  • 手入力された値を0.5区切りに変換する

    手入力された値を0.5区切りに変換するプログラム を作成しています。 0.1~0.4 を入力 → 0.0 を返す 0.5~0.9 を入力 → 0.5 を返す という感じです。 public static void main(String argv[]){  Double D = new Double(argv[0]);  double d = D.doubleValue() * 2;  int i = (int)d;  double i_d = i;  double d_value = i_d / 2;  Double D_value = new Double(d_value);  String s_str = D_value.toString();  System.out.println(s_str); } で希望する値(String型)は返ってくるのですが・・・ (NumberFormatExceptionは無視します。) すごい無駄の多いプログラムに思えて仕方ありません。 超初心者プログラムであること重々承知ですが、もっと短くなりませんか? 環境:JDK1.4 です。

    • ベストアンサー
    • Java
  • doubleで入力するには?

    はじめまして。 Javaの勉強をはじめたばかりです。 質問のしかたが正しいのかもちょっと自信がないのですが、 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); っていうのがありますよね? これの『int』のところを『double』で入力できるように するにはどうすればいいのでしょうか? すごい初心者な質問で申し訳ないですが、よろしくお願いします。

    • ベストアンサー
    • Java
  •  Javaでのある数の小数点乗について

     Javaでのある数の小数点乗について  数学での計算をJavaを使って計算している所です。Javaの中でもDoubleを使うのではなく、BIgDecimalクラスを使って計算をしています。しかし、BigDecimalの値をBigDecimal乗するという事は出来ないですよね? Math.powを使えばDouble型のDouble乗は出来ますが…  そこで、任意の精度で小数点の小数点乗を求める方法は無いでしょうか? 必要ないかもしれませんが参考までに 言語:Java OS:MacOS 10.5

    • ベストアンサー
    • Java
  • 文書を読み込み配列に格納

    質問のタイトル通りなのですが、Javaプログラミングで 例えば、 1.2;2.3;1.0; 5.3;0.3;0.5; 1.4;4.2;2.2; といった3行の文書があるとして、この文書を読み込み、配列d[3][3] に格納するにはどのようにすればよいでしょうか。 d[0][0]=1.2、d[0][1]=2.3、d[0][2]=1.0、d[1][0]=5.3といった具合に 格納したいのです。数値はdouble型で格納しようしています。 とりあえず、 BufferedReader br = new BufferedReader(new FileReader("○○")); で読み込み、 String str = null; String[] str1 = null; String regex = ";"; を用意しておいて、 while((str = br.readLine()) != null){ str1 = str.split(regex); } で数値を分割するところまでできています。 ここからString型からDouble型に変換して、d[3][3]に格納したいと 思っていますが、やり方がよくわかりません。 よろしくおねがいします。

  • doubleについて

    すみません、下記のコードで double ans5 = (7+32)/(double)5; System.out.println("(7+32)/5は" + ans5 + "です。"); 右辺のdoubleが何故つくのかわかりません。5はintでいいと思うのですが、出る答えdoubleなので左辺をdoubleで指定しますよね?ならば、出てくる答えも自然doubleになるのではないのでしょうか? よく割り算の場合、左辺はdoubleで右辺の割る部分もdoubleで指定してありますすが、そういう決まりなんですか? 一度、消して実行したところ、やはり、小数点以下は切り捨てられていました。そういうものだと、このコードは分かっても他に応用が利かないので、詳しい方、教えてください。 かなり初心者ですがよろしくお願いします。」

専門家に質問してみよう