【问题标题】:Add up values from a text file将文本文件中的值相加
【发布时间】:2012-07-10 09:08:55
【问题描述】:

大家好,我有一个文本文件,其中包含每行子字符串 (34, 47) 处的金额。我需要总结文件末尾的所有值。我有这段代码,我已经开始构建,但我不知道如何从这里开始:

public class Addup {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws FileNotFoundException, IOException {
    // TODO code application logic here
    FileInputStream fs = new FileInputStream("C:/Analysis/RL004.TXT");
    BufferedReader br = new BufferedReader(new InputStreamReader(fs));
    String line;
    while((line = br.readLine()) != null){
        String num = line.substring(34, 47);

        double i = Double.parseDouble(num);
        System.out.println(i);
    }
}
}

输出是这样的:

1.44576457E4
2.33434354E6
4.56875685E3

金额有两位小数,我还需要两位小数的结果。实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: java file-io sum bufferedreader


    【解决方案1】:

    DecimalFormat 是最好的选择:

    double roundTwoDecimals(double d) {
                DecimalFormat twoDForm = new DecimalFormat("#.##");
            return Double.valueOf(twoDForm.format(d));
    }
    

    您可以将代码更改为:

    public static void main(String[] args) throws FileNotFoundException, IOException {
        // TODO code application logic here
        double sum = 0.0;
        FileInputStream fs = new FileInputStream("C:/Analysis/RL004.TXT");
        BufferedReader br = new BufferedReader(new InputStreamReader(fs));
        String line;
        while((line = br.readLine()) != null){
            String num = line.substring(34, 47);
    
            double i = Double.parseDouble(num);
            sum = sum + i;
            DecimalFormat twoDForm = new DecimalFormat("#.##");
            System.out.println(Double.valueOf(twoDForm.format(i)));
        }
            System.out.println("SUM = " + Double.valueOf(twoDForm.format(sum)));
    }
    }
    

    【讨论】:

    • 把金额加起来怎么样?
    • 添加了总和部分。我认为在添加所有值之后,您应该截断总和。您不应该截断所有单个值然后添加它们,因为这会产生很大的不同。
    • 十进制格式函数仍然给我同样的输出非常大的金额
    • 我把你的代码和柳岩的格式字符串格式结合起来,因为十进制格式函数在最后给出了与 E6656 相同的输出谢谢你为这个答案投票。
    【解决方案2】:

    或者,使用String.format 格式化双精度值。

    System.out.println (String.format("%1.2f", i));
    

    【讨论】:

    • 感谢 Liu Yan 我将 String.format 和 vikiiii 的 Suggested 方法结合起来,得到了想要的输出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2010-10-16
    相关资源
    最近更新 更多