0

重複の可能性:
表現の浮動小数点エラー?

したがって、このコードを実行して、ファイルから浮動小数点文字列値を読み取り、値を配列に格納しています。プログラムがファイルから「0.333」を読み取ると、新しい float 値が作成されますが、値は 0.33329999446868896 に変換されます。どうしてこれなの?そして、どうすればこの問題を解決できますか? 行列は次のように宣言されます。

this.matrix = new double[this.getRow()][this.getCol()];
this.bMatrix = new double[this.getRow()];  

try {
        // make sure no blank lines at the end of the file.
        for (int i = 0; (strLine = reader.readLine()) != null; i++) {  
            System.out.println("Line from file #" + i + " " + strLine);
            String[] columns = strLine.trim().split("\\s+");
            for (int j = 0; j < columns.length; j++) {
                if (j < (columns.length - 1)) {
                    //A-matrix
                    this.matrix[i][j] = new Float(columns[j]).floatValue();
                    System.out.println("Element added to A-matrix: " + columns[j]);
                } else {
                    // B-matrix
                    bMatrix[i] = new Float(columns[j]).floatValue();
                    System.out.println("Element added to B-matrix: " + columns[j]);

                }
            }
        }
        showMatrix();
    } catch (IOException | NumberFormatException e) {
        reader.close();

    }
}

ご協力ありがとうございます。

4

1 に答える 1

0

これは、浮動小数点数が2進数で表される方法と関係があります。基本的に、0.333を正確に表すことはできません。あなたが得ることができる最も近いものはあなたが見る数です。印刷用に短いバージョンが必要な場合は、値を出力する前にStringFormatterなどを使用してください。

于 2012-07-13T20:00:04.050 に答える