Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 新浮动(“0.333”)转换我的0.333 0.333+;(小数点后14位)_Java - Fatal编程技术网

Java 新浮动(“0.333”)转换我的0.333 0.333+;(小数点后14位)

Java 新浮动(“0.333”)转换我的0.333 0.333+;(小数点后14位),java,Java,可能重复: 所以我运行这段代码从文件中读取浮点字符串值,并将这些值存储到数组中。当程序从文件中读取“0.333”时,它会创建一个新的浮点值,但该值会转换为0.33329994468896!为什么会这样?我如何解决这个问题?矩阵声明如下: this.matrix = new double[this.getRow()][this.getCol()]; this.bMatrix = new double[this.getRow()]; try { // make sure no

可能重复:

所以我运行这段代码从文件中读取浮点字符串值,并将这些值存储到数组中。当程序从文件中读取“0.333”时,它会创建一个新的浮点值,但该值会转换为0.33329994468896!为什么会这样?我如何解决这个问题?矩阵声明如下:

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();

    }
}
this.matrix=newdouble[this.getRow()][this.getCol()];
this.bMatrix=newdouble[this.getRow()];
试一试{
//确保文件末尾没有空行。
对于(inti=0;(strLine=reader.readLine())!=null;i++{
System.out.println(“文件中的行#“+i+”+strLine);
String[]columns=strLine.trim().split(\\s+);
对于(int j=0;j

感谢您的帮助。

这与二进制表示浮点数的方式有关。本质上,你不能精确地表示0.333。你能得到的最接近的数字是你看到的数字。如果要打印的版本较短,请在输出值之前使用StringFormatter或其他工具。

这是一个多副本。让我们搜索一下。在我们找到之前,这里有一个元素:但是0.3332999446868896离0.333太远了。浮点应具有23位二进制数字精度。他们真的是同一个问题吗?@Gene是的,一个浮点数的精度只有8位小数。这似乎只是一个打字错误,而写0.3333的海报是必须的。更容易理解哇。我希望不是这样。我需要准确的数字以便以后计算。因此,我无法将0.333转换为新的Float()值?@Michael如果精度对您来说非常重要,请使用
BigDecimal
,浮点计算本质上是不准确的。对于Java原语,没有任何错误。必须有数字库来处理这个问题,但它们的使用速度要慢几个数量级。