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

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

基本上必须要对每个值进行转换。 两种数组类型之间没有隐式转换,因为在JITting之后用于处理它们的代码会有所不同 – 它们具有不同的元素大小,而float需要转换,而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; } 

在Java 8中,如果您真的想要,您可以:

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

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

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

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

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

HTH