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