双倍的准确性

时间:2013-06-21 14:49:34

标签: java

我有以下输入:

37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 23067588207539346171171980310421047513778063246676

我希望保存它至少保持10sf的准确度。

我的代码:

BufferedReader br = null;
    DecimalFormat d = new DecimalFormat("#");

    try {
        br = new BufferedReader(new FileReader(file));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println(e);
    }



    while(br.readLine() != null) {
        String x = d.format(Double.parseDouble(br.readLine()));
        System.out.println(x);
    }

但是,在这一点上,我可以将x转换为双倍维持精度吗?

谢谢:)

1 个答案:

答案 0 :(得分:4)

您应该能够使用double维持大约15位有效数字的准确性。您只需要保持Double.parseDouble返回的值,而不是只是格式化它。您还需要只阅读每一行:

String line;
while ((line = br.readLine()) != null) {
    double value = Double.parseDouble(line);
    // Use value...
}

如果实际需要确切的值(而不是问题中所述的10位有效数字),如果它们都是整数,则应使用BigInteger,或{{1}如果某些值实际上是非整数。