-PR-
締切り
済み

doubleについて

  • 暇なときにでも
  • 質問No.70117
  • 閲覧数40
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 34% (19/55)

すみません、下記のコードで

double ans5 = (7+32)/(double)5;
System.out.println("(7+32)/5は" + ans5 + "です。");

右辺のdoubleが何故つくのかわかりません。5はintでいいと思うのですが、出る答えdoubleなので左辺をdoubleで指定しますよね?ならば、出てくる答えも自然doubleになるのではないのでしょうか?
よく割り算の場合、左辺はdoubleで右辺の割る部分もdoubleで指定してありますすが、そういう決まりなんですか?

一度、消して実行したところ、やはり、小数点以下は切り捨てられていました。そういうものだと、このコードは分かっても他に応用が利かないので、詳しい方、教えてください。
かなり初心者ですがよろしくお願いします。」
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.2

解説自体はametsuchi様のものでいいのですが、 (32+7)/(double)5だと答えは7.8になるはずですよ。 基本的に計算は高い方に合わせれられるので、 (32+7)/(double)5 = 39.0/5.0になります。 ではでは☆
解説自体はametsuchi様のものでいいのですが、
(32+7)/(double)5だと答えは7.8になるはずですよ。

基本的に計算は高い方に合わせれられるので、
(32+7)/(double)5 = 39.0/5.0になります。

ではでは☆


  • 回答No.1
レベル11

ベストアンサー率 31% (81/257)

JAVAだろうが、C++だろうが、Cだろうが、Fortranだろうが全く同じで、左辺のタイプに関係なく、右辺の計算途中で、整数同士なら整数タイプの演算になります。 7+32は=39で問題なし。問題は39/5です。39も5も整数ですから、一旦右辺の値は=7になります。これをdoubleにすると、=7.0 右辺の(double)は勿論Castです。(double)5ではなく、5.0と書けば問題ないはず ...続きを読む
JAVAだろうが、C++だろうが、Cだろうが、Fortranだろうが全く同じで、左辺のタイプに関係なく、右辺の計算途中で、整数同士なら整数タイプの演算になります。
7+32は=39で問題なし。問題は39/5です。39も5も整数ですから、一旦右辺の値は=7になります。これをdoubleにすると、=7.0

右辺の(double)は勿論Castです。(double)5ではなく、5.0と書けば問題ないはずです。

普通、実数値の定数は「5」などと書かずに「5.0」、「5.0f」などと書きます。

実はJAVAは経験がないので自信がないのですが、C++とこの辺は変わらんはず。
お礼コメント
koujin

お礼率 34% (19/55)

ありがとうございました。
投稿日時 - 2001-05-01 22:22:54
  • 回答No.3
レベル11

ベストアンサー率 31% (81/257)

Kanataさん、補足ありがとうございます。 「(32+7)/(double)5だと答えは7.8」これは勿論です。混合演算の規則どおりです。私も浮動小数点を扱って30年近くになりますから当然100も承知です。 「(32+7)/5」に対する説明のつもりでした。聊か説明が曖昧でしたね。
Kanataさん、補足ありがとうございます。

「(32+7)/(double)5だと答えは7.8」これは勿論です。混合演算の規則どおりです。私も浮動小数点を扱って30年近くになりますから当然100も承知です。

「(32+7)/5」に対する説明のつもりでした。聊か説明が曖昧でしたね。
  • 回答No.4
レベル7

ベストアンサー率 71% (5/7)

 キャストの位置と演算結果の違いについては、以下のプログラムでわかると思います。 public class cast { public static void main(String args[]) { double Ans; Ans = (7 + 32) / (double)5; System.out.println("[1]演算の精度は精度の高いほうに合わせられ ...続きを読む
 キャストの位置と演算結果の違いについては、以下のプログラムでわかると思います。

public class cast {

public static void main(String args[]) {

double Ans;

Ans = (7 + 32) / (double)5;
System.out.println("[1]演算の精度は精度の高いほうに合わせられる " + Ans);
Ans = (7 + 32) / 5.0;
System.out.println("[2]上と同じ " + Ans);

Ans = (7 + 32) / 5f;
System.out.println("[3]整数(5)を浮動小数点数に変換するときに誤差が出る " + Ans);
Ans = (7 + 32) / 5.0f;
System.out.println("[4]上と同じ " + Ans);

Ans = (double)(7 + 32) / 5;
System.out.println("[5]除算よりもキャストが優先なので一番上と同じ " + Ans);

Ans = (7 + 32) / 5;
System.out.println("[6]整数として演算した結果をdoubleに入れても小数部はなくなる " + Ans);
Ans = (double)((7 + 32) / 5);
System.out.println("[7]整数として演算した結果をキャストしても小数部はなくなる " + Ans);

};

}

 結果からわかるように、[1]と[2]、[3]と[4]の結果では誤差の出方がほんの少し違ってきますので、
それらの二つを混合して使うことは避ける(決り文句として片方の方法を使う)べきでしょう。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ