在Java中的金字塔数组函数中显示数字时出错

在Java中的金字塔数组函数中显示数字时出错,java,arrays,foreach,Java,Arrays,Foreach,下面的类DoubleArray用于创建和显示金字塔阵列。 当尝试测试代码时,在金字塔数组中显示数字时出现问题,如下图所示。以下代码中的错误在哪里 public class DoubleArray { public static double[] createSequenceArray(int size){ double[] array; array = createZerosArray(size); for(int i=0 ; i< size ; i++){

下面的类
DoubleArray
用于创建和显示金字塔阵列。 当尝试测试代码时,在金字塔数组中显示数字时出现问题,如下图所示。以下代码中的错误在哪里

public class DoubleArray {
  public static double[] createSequenceArray(int size){
    double[] array;
    array = createZerosArray(size);
    for(int i=0 ; i< size ; i++){
        array[i]=i;
    }
    return array;
}
  public static String arrayToString(double[] dblArray){
      String container="";
      for (double item : dblArray){
        container =container + item +" ";
      }
      return container;
  }   
  public static String arrayToString(double[][] dblMatrix){
      String container ="";
      for (double[] item: dblMatrix){
        container = container + arrayToString(item)+"\n";
      }
      return container;
  }
  public static double[][] createPyramidArray(int maxRows){
        double [][] array = new double[maxRows][]; 
        for(int i=0; i<maxRows;i++){    
        array[i] = new double[i+1];
        for(int j = 0; j<array[i].length;j++){
            array[i][j]=(j+1)*1.1;
        }
        }
        return array;
   }
 }
}
控制台显示如下:打印的是3.30000000000000003,而不是3.3


问题不在于打印逻辑,而在于Java浮点数的行为。当您执行
3*1.1
时,您将获得
3.30000000003
。这就是IEE754浮点运算的工作方式

选中此项:

    double d1 = 1 * 1.1;
    double d2 = 3 * 1.1;
    System.out.println(d1); //Output 1.1
    System.out.println(d2); //Output 3.3000000000000003
要解决这个问题,可以使用Java的
printf()
方法来打印格式化字符串。所以您可以使用类似于
System.out.printf(“%.1f”,d2)的东西

阅读更多关于


根据OP的评论进行编辑:

我的回答强调了根本原因,也强调了部分解决方案。基本上,您需要的是格式化的双值。为此,您可以使用
java.text.DecimalFormat
根据需要格式化双精度值。下面是解决问题的方法:

    double d2 = 3 * 1.1;
    DecimalFormat decimalFormat = new DecimalFormat(".#");
    String d2n = decimalFormat.format(d2);
    System.out.println(d2); //Outputs - 3.3000000000000003
    System.out.println(d2n);  //Outputs - 3.3

要修复它,请像打印字符串一样打印

System.out.printf("%.1f", DoubleArray.arrayToString(arrayDb));

在这里你可以找到为什么和什么我认为数组[I]。长度永远不会起作用。另一件困扰你的事情是乘法,试着加1.1。
将1.1添加到先前的结果中,同时在行中循环,其中是
createSequenceArray
?屏幕截图是
createSequenceArray
createSequenceArray
?两者的o/p。第一行是序列数组,其余的是金字塔数组。我想说的是为什么数字以这种方式显示,我想将它们显示为1.1 2.2 3.3 4.4,但当我看到一些数字显示为3.3000003和6.0000005 istead,即3.3和6.6时,我并不想简单地打印出来。我试图连接该数组中数组的每个案例,然后打印最终结果。很抱歉,你的回答没有回答我的问题。@pentanol,伙计,一旦知道根本原因,解决问题应该不是问题。此外,您还要求确定根本原因。无论如何,检查我编辑的答案。您需要在
arrayToString
类中使用
DecimalFormat
。如果有任何问题,请随时告诉我。我不想简单地打印出来。我试图连接该数组中数组的每个案例,然后打印最终结果。很抱歉,您的答案没有回答我的问题。虽然此代码可能会回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,只使用代码的答案是没有用的。
System.out.printf("%.1f", DoubleArray.arrayToString(arrayDb));