重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

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

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

一度、消して実行したところ、やはり、小数点以下は切り捨てられていました。そういうものだと、このコードは分かっても他に応用が利かないので、詳しい方、教えてください。
かなり初心者ですがよろしくお願いします。」

A 回答 (4件)

 キャストの位置と演算結果の違いについては、以下のプログラムでわかると思います。



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]の結果では誤差の出方がほんの少し違ってきますので、
それらの二つを混合して使うことは避ける(決り文句として片方の方法を使う)べきでしょう。
    • good
    • 0

Kanataさん、補足ありがとうございます。



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

「(32+7)/5」に対する説明のつもりでした。聊か説明が曖昧でしたね。
    • good
    • 0

解説自体はametsuchi様のものでいいのですが、


(32+7)/(double)5だと答えは7.8になるはずですよ。

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

ではでは☆
    • good
    • 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++とこの辺は変わらんはず。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2001/05/01 22:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!