在java中将String转换为double。更改打印双面的格式

时间:2012-05-19 14:39:44

标签: java csv

我正在java和

中阅读以下CSV文件
1191196800.681 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D

以下是我的代码,用于读取此CSV文件并将CSV文件的第1列(即字符串)转换为双精度

public class ReadCSV {

public static void main(String[] args) {

    try {
        BufferedReader CSVFile = new BufferedReader(new FileReader(
                "C:\\example.txt"));

        try {
            String dataRow = CSVFile.readLine();

            while (dataRow != null) {
                String[] dataarray = dataRow.split("-");

                String temp = dataarray[0];

                double i = Double.parseDouble(temp);

                System.out.println(temp);
                System.out.println(i);
                dataRow = CSVFile.readLine();

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}

}

当我执行代码时,我得到以下值

1191196800.681 
1.191196800681E9

为什么变量“temp”和“i”的值不相同。我必须在代码中进行哪些更改才能获得以下值:

1191196800.681 
1191196800.681 

提前致谢。

3 个答案:

答案 0 :(得分:7)

temp和i完全相同,只是双值以科学记数法格式化。如果您喜欢使用DecimalFormat,则可以使用不同的格式进行格式化。

答案 1 :(得分:1)

Yups vizier是正确的,你需要做的是:

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    String dataRow = "1191196800.681";


        String[] dataarray = dataRow.split("-");

        String temp = dataarray[0];
        DecimalFormat df = new DecimalFormat("#.###");
        double i = Double.parseDouble(temp);

        System.out.println(temp);
        System.out.println(df.format(i));

}

答案 2 :(得分:0)

另一个结果是科学记数法,但是是相同的。

如果您想更改表示,可以使用String.format("%.3f", i),表示带有3位小数的数字