代码之家  ›  专栏  ›  技术社区  ›  fifigyuri

如何在Java中将浮点数组转换为双精度数组?

  •  19
  • fifigyuri  · 技术社区  · 16 年前

    我有一个浮点数组,我想在Java中将它转换为一个双精度数组。我知道迭代数组并创建新数组的明显方式。我希望Java能够在希望使用double[]的地方顺利地消化float[]。。。但这是行不通的。

    3 回复  |  直到 16 年前
        1
  •  30
  •   Jon Skeet    16 年前

    基本上 某物 必须对每个值进行转换。这两种数组类型之间没有隐式转换,因为在JITting之后用于处理它们的代码是不同的——它们具有不同的元素大小,浮点需要转换,而double则不需要。将此与引用类型的数组协方差进行比较,其中读取数据时不需要转换(例如,对于字符串引用,位模式与对象引用相同),并且对于所有引用类型,元素大小都相同。

    简言之

    public static double[] convertFloatsToDoubles(float[] input)
    {
        if (input == null)
        {
            return null; // Or throw an exception - your choice
        }
        double[] output = new double[input.length];
        for (int i = 0; i < input.length; i++)
        {
            output[i] = input[i];
        }
        return output;
    }
    
        2
  •  8
  •   Nikolas Charalambidis    10 年前

    IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
    

    但是使用Jon Skeet的函数更好(更干净、更快、更好的语义)。

        3
  •  0
  •   Simon    16 年前

    您真的需要将浮点数组复制到双数组吗?如果在使用浮点时编译器和类型有问题,可以使用此。。。

    float x = 0;
    double d = Double.valueOf(x);
    

    复印一份有什么好处?如果您需要更高精度的基于浮点数的计算结果,请生成结果 double