1
私は、条件に基づいてファイルからいくつかの入力価格を追加して2つの倍数を生成するプログラムを持っています。Javaプログラムのdouble numberのシステム出力
String str;
double one = 0.00;
double two = 0.00;
BufferedReader in = new BufferedReader(new FileReader(myFile));
while((str = in.readLine()) != null){
if(str.charAt(21) == '1'){
one += Double.parseDouble(str.substring(38, 49) + "." + str.substring(49, 51));
}
else{
two += Double.parseDouble(str.substring(38, 49) + "." + str.substring(49, 51));
}
}
in.close();
System.out.println("One: " + one);
System.out.println("Two: " + two);
出力は似ている:
One: 2773554.02
Two: 6.302505836000001E7
質問:
は、入力のいずれもが、その中に3つ以上の小数点以下を持っていません。 1と2の計算方法がまったく同じになります。
なぜ出力形式がこのようなのですか?
私は何を期待しています:
One: 2773554.02
Two: 63025058.36
なぜ印刷は、二つの異なるフォーマットでありますか?私はファイルに出力を書きたいので、小数点以下2桁しかなければなりません。
使用 'DecimalFormat' - 例えばhttp://stackoverflow.com/questions/50532/how-do-iを-format-a-number-in-java – scibuff
また、倍精度解析で導入された丸め誤差を避けるために、 'double'の代わりに' BigDecimal'を使用します(これは2番目の数値の最後に00000001が表示される理由です) – beny23
As常に:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - 非常に価値のある読書。 – mcfinnigan