将字符串转换为浮点会产生意外的返回。 Java的

时间:2015-10-27 16:54:50

标签: java arrays floating-point

我有一个2d数组,它是通过解析文件中的数据而创建的。该方法将每个数据部分发送到字符串。我试图将数组从字符串转换为浮点数。除了一列外,所有东西都打印好。

例如:

2015/10/21,113.7600,42276880.0000,114.0000,115.5800,113.7000

2015/10/20,113.7700,48929200.0000,111.3400,114.1700,110.8200

2015/10/19,111.7300,29723750.0000,110.8000,111.7500,110.1100

转换为:

0.0 113.76 4.227688E7 114.0 115.58 113.7 

0.0 113.77 4.89292E7 111.34 114.17 110.82

0.0 111.73 2.972375E7 110.8 111.75 110.11 

日期列意味着返回0.0,但第3列返回一个奇怪的响应。这是我的代码或数据的错误吗?

将字符串数组转换为浮点数组方法

public void createDataArray(String [] [] n){
    for(int x=0;x<n.length;x++) {
        for(int y=0;y<n [x].length;y++) {
            switch(y) {
            case 0:
                dataArray[x] [y] = 0;
                break;
            case 1:
                dataArray[x] [y] = new Float(n[x] [y]);
                break;
            case 2:
                dataArray[x] [y] = new Float(n[x] [y]);
                break;
            case 3:
                dataArray[x] [y] = new Float(n[x] [y]);
                break;
            case 4:
                dataArray[x] [y] = new Float(n[x] [y]);
                break;
            case 5:
                dataArray[x] [y] = new Float(n[x] [y]);
                break;
            case 6:
                dataArray[x] [y] = new Float(n[x] [y]);
                break;
            }
        }
    }
}

新阵列打印方法

public void printArray() {
    for(int x=0;x<dataArray.length;x++) {
        for(int y=0;y<dataArray[x].length;y++) {
            System.out.printf("%s ", dataArray[x] [y]);
        }
        System.out.println();
    }
}

如果您想了解更多信息,请询问。我相当确定它的数据有问题,但即使在给出假值后它仍会返回类似的响应。

2 个答案:

答案 0 :(得分:1)

这是科学记数法,尝试使用%f代替浮点数而不是%s(字符串)。您可以根据需要获得更多控制权:https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

答案 1 :(得分:1)

根据您的要求,您必须使用%f来打印float / double。

示例:

String[] floatNumbers = {"42276880.0000", "48929200.0000","29723750.0000"};

for (String s: floatNumbers ) {
    Float temp = new Float(s);
    System.out.printf("%f\t", temp);
    System.out.println(temp);
}

输出:

  

42276880.000000 4.227688E7

     

48929200.000000 4.89292E7

     

2972​​3750.000000 2.972375E7

Docs