
すみません、下記のコードで
double ans5 = (7+32)/(double)5;
System.out.println("(7+32)/5は" + ans5 + "です。");
右辺のdoubleが何故つくのかわかりません。5はintでいいと思うのですが、出る答えdoubleなので左辺をdoubleで指定しますよね?ならば、出てくる答えも自然doubleになるのではないのでしょうか?
よく割り算の場合、左辺はdoubleで右辺の割る部分もdoubleで指定してありますすが、そういう決まりなんですか?
一度、消して実行したところ、やはり、小数点以下は切り捨てられていました。そういうものだと、このコードは分かっても他に応用が利かないので、詳しい方、教えてください。
かなり初心者ですがよろしくお願いします。」
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.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]の結果では誤差の出方がほんの少し違ってきますので、
それらの二つを混合して使うことは避ける(決り文句として片方の方法を使う)べきでしょう。
No.3
- 回答日時:
Kanataさん、補足ありがとうございます。
「(32+7)/(double)5だと答えは7.8」これは勿論です。混合演算の規則どおりです。私も浮動小数点を扱って30年近くになりますから当然100も承知です。
「(32+7)/5」に対する説明のつもりでした。聊か説明が曖昧でしたね。
No.2
- 回答日時:
解説自体はametsuchi様のものでいいのですが、
(32+7)/(double)5だと答えは7.8になるはずですよ。
基本的に計算は高い方に合わせれられるので、
(32+7)/(double)5 = 39.0/5.0になります。
ではでは☆
No.1
- 回答日時:
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++とこの辺は変わらんはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実数からの小数部の取得
-
javaで1.8x10の308乗÷...
-
printfでのエラーがわからない...
-
「続行するには何かキーを押し...
-
オブジェクトの中のプロパティ...
-
ORA-01858: 数値を指定する箇所...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
1ページに10件ずつ表示したい
-
IF関数でEmpty値を設定する方法。
-
javaで質問です。 文字列2023/2...
-
hiddenの値が期待した値で取得...
-
変数を動的に作るには?
-
大量のデータを読み込んで表示...
-
動的配列が存在(要素が有る)か...
-
JSPやサーブレットでSystem.out...
-
C#で、あるクラスのメンバーす...
-
【Java8以降】csvファイルの複...
-
java キーボード入力された値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実数からの小数部の取得
-
double型変数値の整数部分のみ...
-
0dの意味を教えてください
-
Javaで何パーセント%かを表示...
-
最大値と最小値の求め方
-
newton法のjacobi
-
プログラマーの達人という本の...
-
先に計算したほうがいいのでし...
-
べき乗
-
Javaによる利率計算の実装方法
-
java のfor文について質問です。
-
乱数について
-
x^2+y^2<n^2
-
LU分解を利用した逆行列のプロ...
-
分を表す数値(int型)を、小数...
-
プログラムで指数関数を求めよ...
-
double型の足し算について
-
Javaコンパイルエラー
-
掛け算演算を使わない掛け算
-
乱数のdouble型について
おすすめ情報