【发布时间】:2012-03-22 11:25:56
【问题描述】:
我有一个程序,我通过根据条件从文件中添加几个输入价格来生成两个双数。
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
问题:
输入中的小数点均不超过两位。一和二的计算方式完全相同。
那为什么输出格式是这样的。
我期待的是:
One: 2773554.02
Two: 63025058.36
为什么打印有两种不同的格式?我想再次将输出写入文件,因此小数点后必须只有两位数。
【问题讨论】:
-
使用
DecimalFormat- 例如stackoverflow.com/questions/50532/… -
另外,我会使用
BigDecimal而不是double来避免解析双精度时引入的舍入错误(这就是为什么您会在第二个数字的末尾看到 00000001) -
一如既往:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - 非常值得一读。