【初心者】Java質問・相談スレッド93【大歓迎】

このエントリーをはてなブックマークに追加
964デフォルトの名無しさん
昨日からJava始めたばかりですが、いきなり分からない事が出てきました。

//Exercise1.java

class Exercise1{
public static void main(String args[]){
float a;
a=2.0;
System.out.println("変数aの値は"+a+"です");
}
}

これでコンパイルすると、エラーが出ます。
検出値:double
期待値:float
となります。
doubleで宣言してやるとうまく行きましたが、どうしてfloatで宣言できないのでしょうか?
965デフォルトの名無しさん:2006/11/20(月) 15:51:02
>>964
2.0という値の型がdoubleだから。
2.0f と書くとfloatの定数になる。
966デフォルトの名無しさん:2006/11/20(月) 16:14:15
>>965
すいません。理解できません。
本には、floatとdoubleの違いは、扱える桁数にある、と書かれていたのですが…
それ以外にも違いがあるということでしょうか?
967デフォルトの名無しさん:2006/11/20(月) 16:16:33
>>966
double から float への変換は、精度が悪くなる変換なので
キャストしないとコンパイル時に怒られる。

float から float なら問題ないけど。
968ぴゅあ:2006/11/20(月) 16:22:55
なんだろ?

>>963
>当り前な事でも
誰が当たり前と決めたのか知らないけど
どんな些細なことでも実際にやってみることが大切だと思いますけどね
969デフォルトの名無しさん:2006/11/20(月) 16:33:58
>>967
せっかく答えて頂いたのに、私の理解力が追いついていません。
とりあえず、入門書を一通り読んでから、また来ます。
ありがとうございました。
970デフォルトの名無しさん:2006/11/20(月) 17:16:30
>>966
2.0 と書いただけだと double になるのよ。だから内部的には2進数で
   0100000000000000000000000000000000000000000000000000000000000000
として保持される。64ビットを使って表現してるわけですよ。さてここで
あえて float だと指定してすると(※ 2.0f と書く(>>965を参照))今度は
   01000000000000000000000000000000
というように32ビットの表現になるわけですよ。扱える桁数が違うとか、
数値の精度が違うというのは、こういうことです。
>>964>>966>>969は、わかりましたか?
971970:2006/11/20(月) 17:20:42
あと、詳しいことは http://ja.wikipedia.org/wiki/IEEE754 でも見て勉強してくれ。
972デフォルトの名無しさん:2006/11/20(月) 17:33:26
>>969
float と double の違いは、扱える桁数にある
⇒ 桁数が多いほうから少ないほうへ不用意に変換すると、値が変わってしまうことがある
⇒ もしプログラマ側が意図していない変換だとバグの元になる (実際この手のバグでロケットが墜落している)
⇒ コンパイラが親切にも警告を出してくれる

OK?
973デフォルトの名無しさん:2006/11/20(月) 17:43:29
みなさん。
ちょっと解かったかもしれません。
つまり、
>>964でコンパイル出来るということは、32ビットで作業しているから。
本の作者は32ビットの環境でコンパイルしていたって事でしょうか?
Java のバージョンの問題?
OSの違い?
974デフォルトの名無しさん:2006/11/20(月) 17:43:50
精度や桁数がどうとかいう問題の前に、
ある型の変数に異なる型の値は入れられない、
というのを理解しているんだろーか。
975デフォルトの名無しさん:2006/11/20(月) 17:45:32
javaのバージョン (かな? コンパイラでバージョンアップと共にワーニングが厳しくなるのはよくある事)
もしくは本のバグ
976デフォルトの名無しさん:2006/11/20(月) 17:50:32
>>973
32bit の環境でコンパイルしたとか、OS が違うとかは考えにくい
java もしくは javac のバージョンが違うというのは、まあよくあること

最も多いのは、本の誤植もしくはバグ
977デフォルトの名無しさん:2006/11/20(月) 17:55:31
>>974
それは大丈夫だと思います。
int に 2.0 は入れられないということですよね。
int a;
a=2;
としなければいけないのは解かります。
2.0 は double で、2.0f とすれば float ということですね。
978デフォルトの名無しさん:2006/11/20(月) 18:07:54
本のバージョンは 1.4.1_01 で
私のバージョンは 1.5.0_09 でした。
Java のバージョン違いが原因?
とにかく、2.0 だと double になるというのが解かったので、本の float を double に置き換えながら、読み進めたいと思います。
979デフォルトの名無しさん:2006/11/20(月) 18:09:25
>>978
その本の名前を書いてちょ
980デフォルトの名無しさん:2006/11/20(月) 18:18:48
>>979
世界でいちばん簡単な
Java の e 本
Java の基本と考え方がわかる本

2003年6月1日 第1版第1刷発行

著者 堀江 幸生

発行 株式会社秀和システム

ISBN4-7980-0533-9 C3055

です。
981デフォルトの名無しさん:2006/11/20(月) 18:21:29
>>980
うーん、改訂入ってるんじゃないかな・・・