- ベストアンサー
int型で表示したいのですが・・・
java初心者です。 テキストファイルの読み出しを行っているプログラムで int型に数値を格納して表示したいのですが、わからず困っています。 下記はテキストファイルの読み出しを行ったプログラムです。 import java.io.*; class BufferedReaderTest { public static void main(String[] args) { try { FileReader in = new FileReader("file name"); BufferedReader br = new BufferedReader(in); String line; while ((line = br.readLine()) != null) { System.out.println(a); } br.close(); in.close(); } catch (IOException e) { System.out.println(e); } } } int a = Integer.parseInt(line);を使ってみたのですができませんでした。 読み込みしようとしているファイルの中身は -0.00012 -0.00009 -0.00009 -0.00012 -0.00009 -0.00009 -0.00009 -0.00012 ・・・・・・・・・ となっています。 教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
必ず小数点以下5桁で出力したいなら、PrintStreamクラスのprintf()メソッドを使うという方法もあります (Java 5以降のみ)。 PrintStream ps = new PrintStream(System.out); float a = Float.parseFloat(line); ps.printf("%1.5f\n", a); しかし、「テキストファイルと同じ表示結果を出力したい」のであれば、テキストファイルから読み込んだStringをそのまま出力するのが最も確実です。 たとえば、テキストファイルの中に -0.0123 -0.01230 という2つの行があったとすると、Float.parseFloat()した時点で両者の違いがなくなってしまいます。上記のprintf()を使う方法ではどちらも-0.01230となって、これらの行を区別して出力することはできません。
その他の回答 (3)
どうしてもfloatとして取り出したものを-0.00012といった形で出力したいなら、 String s = NumberFormat.getInstance().format(a); みたいにして、NumberFormatクラスでフォーマットしてString値として取り出し、それを出力するっていう手はある。要するに、float値を、指定したフォーマットの形式で表現したStringとして取り出し、それを書き出すわけだ。だから、「floatのまま出力」するわけじゃない。 どうも、「変数型」というものがうまく理解できてないみたいなんだが。なんだって、float型にこだわらないといけないのかね?(最初はint型にこだわってたみたいだが)「値をfloatとして取り出したら、ずっとfloatのまま使い続けたい」という、変な思い込みがないかね? 値は、そのときそのときで、その利用に適した形に変換しながら使えばいい。ファイルから読み込むときはStringで、必要に応じてfloatとして取り出す。出力するときはまたStringで出す。そうやってその場その場で適した形にすればいいだけのこと。「floatのまま出力したい」という意味がわからない。そもそも、 System.out.println(a); こうやってfloatの変数aを出力したとしよう。これ、実際には「floatの値を出力」なんてしてないぜ? 実際には「aという値を、Sringに変換し、そのString値を出力している」んだ。このaの値がfloatだろうがintだろうが関係なく、すべて出力はStringに変換されている。ただ、それをプログラマが自分でやっているか、Javaの側で自動で行っているか、それだけだ。そのへん、「変数の型とその利用」について、どこか思い込みみたいなものがあるんじゃないかね?
お礼
回答ありがとうございます。 まだまだ勉強が足りず未熟者なので、なるほどと思いました。 回答を参考にしてまたプログラムを作ろうと思います。 ありがとうございました。
- agent47
- ベストアンサー率0% (0/1)
テキストファイルと同じ表示結果を出力したいなら、 下記のように直接出力されたらいいでしょうか。 while ((line = br.readLine()) != null) { System.out.println(line); }
お礼
回答ありがとうございます。 float型で同じ値を出力したいのですが できないんでしょうか?
- Gab_km
- ベストアンサー率40% (20/50)
読み込もうとしている値は、小数ですよね。 int型は整数なので、それで上手くいかないのでしょう。 小数点を扱える数値型で変数を宣言してみてください。
お礼
回答ありがとうございます。 int型で小数点は扱えないんですか。勉強になりました。 ありがとうございます。
補足
ためしにfloat型でfloat a = Float.parseFloat(line);をwhile文の中にいれて 実行したのですが、表示された結果が -1.2E-4 -9.0E-5 -9.0E-5 -1.2E-4 -9.0E-5 -9.0E-5 -9.0E-5 -1.2E-4 -1.2E-4 ・・・・・・・ と表示されました。 テキストファイルと同じ表示結果を出力するには どのようにしたらよいでしょうか?
お礼
回答ありがとうございます。 そのような方法もあるのですね。 この方法をもとにまたプログラムを作ってみたいと思います。 ありがとうございました。