从.txt文件中读取双精度数

时间:2016-08-24 22:37:25

标签: java file

我有一个.txt文件,其中的数据写如下:

  

ZONEIDFROM; ZONEIDTO; DISTANCETYPE; FACILITYID;距离;
  1; 2; C; HF; 9,416667;

如果zoneidfrom = 1且zoneidto = 2,我想返回距离。

除了距离是双倍之外,我的代码中的所有内容似乎都没问题。

public void Load(String filename, int zoneidfrom, int zoneidto, String mode) throws Exception{
    queue.clear();
    int from,to;
    double dist;
    String c_or_l;

    BufferedReader br =  new BufferedReader(new FileReader(filename));
    String ligne = br.readLine(); //First line read
    while(ligne != null){
        ligne = br.readLine(); //First line read
        String [] tab = ligne.split(";");
        ArrayList<Double> d = new ArrayList<>();
        d.add(Double.parseDouble(ligne));
        from = Integer.parseInt(tab[0]);
        to = Integer.parseInt(tab[1]);
        c_or_l = tab[2];
        dist = d.get(4);

        if(zoneidfrom == from && zoneidto == to && c_or_l.equals(mode));{
            distance(dist);
        }
    }      
}
public double distance(double db_distance){
    return db_distance;
}

2 个答案:

答案 0 :(得分:2)

首先,您的代码未解析double的正确字符串值。你应该解析tab[4],而不是整行。

其次,double值包含小数分隔符的逗号。 Double.parseDouble()未考虑Locale。

您应该使用NumberFormat来解析双精度,同时使用适当的Locale

有关详细信息,请参阅this answer

答案 1 :(得分:1)

ligne是字符串,它将是&#34; 1; 2; C; HF; 9,416667;&#34;在第一个while循环中,现在你试图将它解析为double,显然它会抛出数字格式异常。 要获得距离,Double.parseDouble(tab [4] .replace(&#34;,&#34;,&#34;。&#34;))

相关问题