开发者

How to convert array of floats to array of doubles in Java?

开发者 https://www.devze.com 2022-12-15 13:44 出处:网络
I have an array of floats and I would like to convert开发者_C百科 it to an array of doubles in Java. I am aware of the obvious way of iterating over the array and creating a new one. I expected Java t

I have an array of floats and I would like to convert开发者_C百科 it to an array of doubles in Java. I am aware of the obvious way of iterating over the array and creating a new one. I expected Java to digest a float[] smoothly where it wishes to work with double[]... but it can not work with this. What is the elegant, effective way of doing this conversion?


Basically something has to do the conversion of each value. There isn't an implicit conversion between the two array types because the code used to handle them after JITting would be different - they have a different element size, and the float would need a conversion whereas the double wouldn't. Compare this to array covariance for reference types, where no conversions are required when reading the data (the bit pattern is the same for a String reference as an Object reference, for example) and the element size is the same for all reference types.

In short, something will have to perform conversions in a loop. I don't know of any built-in methods to do this. I'm sure they exist in third party libraries somewhere, but unless you happen to be using one of those libraries already, I'd just write your own method. For the sake of convenience, here's a sample implementation:

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


In Java 8 you can, if you really want to, do:

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

But it's better (cleaner, faster, better semantics) to use Jon Skeet's function.


Do you actually need to copy your float array to a double array? If you are having trouble with the compiler and types when using the floats you can use this...

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

What advantage do you get by taking a copy? If you need greater precision in the results of computations based on the floats then make the results double. I can see quite a lot of downsides to having a copy of the array, and performing the copy function, especially if it is large. Make sure you really need to do it.

HTH

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号