我有一个浮点数数组,希望在Java中将其转换为双精度数组。我知道通过迭代数组并创建新数组的明显方式。我期望Java能够平滑地处理float[] 并希望使用double[]...但它无法处理。
有什么优雅有效的方法可以进行此转换吗?
我有一个浮点数数组,希望在Java中将其转换为双精度数组。我知道通过迭代数组并创建新数组的明显方式。我期望Java能够平滑地处理float[] 并希望使用double[]...但它无法处理。
有什么优雅有效的方法可以进行此转换吗?
基本上,需要某个东西来转换每个值。两种数组类型之间没有隐式转换,因为在 JIT 后处理它们的代码将是不同的 - 它们具有不同的元素大小,并且 float 需要进行转换,而 double 则不需要。与引用类型的数组协变相比,在读取数据时不需要进行任何转换(例如,对于 String 引用和 Object 引用,位模式相同),并且所有引用类型的元素大小相同。
简而言之,在循环中需要进行转换。我不知道是否有内置方法可以做到这一点。我相信它们存在于某些第三方库中,但除非您已经在使用其中一个库,否则我会建议编写自己的方法。为了方便起见,这里提供一个示例实现:
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;
}
convertToDoubles
或toDoubles
,并为其他基本类型(和装箱类型)提供重载。 - Aleksandr Dubinsky在Java 8中,如果您真的想要,您可以执行以下操作:
IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
使用Jon Skeet的函数会更好(更清晰、更快、更好的语义),但这并不意味着原来的函数有什么问题。
float x = 0;
double d = Double.valueOf(x);
复制数组有什么优势?如果您需要在基于浮点数的计算结果中获得更高的精度,则将结果设置为double
。我可以看到拥有数组副本和执行复制函数的许多缺点,特别是如果它很大。确保您真的需要这样做。
希望对您有所帮助
float[]
类型时,调用需要double[]
类型的方法。 - Andreas DolkDouble.valueOf
[可能会] 实例化一个对象。使用简单的强制转换即可。 - Aleksandr Dubinskyfloat f = 0; double d = f;
就可以正常工作。 - Dmitry Avtonomov