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

时间:2010-01-07 09:42:26

标签: java type-conversion

我有一个浮点数组,我想将它转换为Java中的双精度数组。我知道迭代数组并创建一个新数组的明显方法。我希望Java能够顺利地消化一个float [],它希望使用double [] ......但它不能用于此。     这种转换的优雅,有效方式是什么?

3 个答案:

答案 0 :(得分:30)

基本上某些东西必须对每个值进行转换。两种数组类型之间没有隐式转换,因为在JITting之后用于处理它们的代码会有所不同 - 它们具有不同的元素大小,而float需要转换,而double则不需要。将此与引用类型的数组协方差进行比较,其中读取数据时不需要转换(例如,对于String引用,位模式与Object引用相同),并且所有引用类型的元素大小相同。 / p>

简而言之,某些内容必须在循环中执行转换。我不知道有任何内置的方法来做到这一点。我确定它们存在于某个地方的第三方库中,但除非您恰好使用其中一个库,否则我只想编写自己的方法。为方便起见,这是一个示例实现:

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;
}

答案 1 :(得分:7)

在Java 8中,如果你真的想,你可以这样做:

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

但使用Jon Skeet的功能会更好(更干净,更快,更好的语义)。

答案 2 :(得分:1)

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

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

通过复印有什么好处?如果基于浮点数计算结果需要更高的精度,则生成结果double。我可以看到拥有数组副本和执行复制功能的很多缺点,特别是如果它很大。确保你真的需要这样做。

HTH