web-dev-qa-db-ja.com

Javaでfloatの配列をdoubleの配列に変換する方法は?

Floatの配列があり、Javaでdoubleの配列に変換したいと思います。私は、配列を反復処理して新しい配列を作成する明白な方法を知っています。 Javaはfloat []をdouble []で動作させたい場所でスムーズに消化することを期待していました...しかしこれでは動作しません。この変換を行うためのエレガントで効果的な方法は何ですか? ?

20
fifigyuri

基本的に何か各値の変換を行う必要があります。 JITting後にそれらを処理するために使用されるコードが異なるため、2つの配列タイプ間に暗黙の変換はありません。要素サイズが異なり、floatは変換が必要ですが、doubleは変換が必要ありません。これを参照型の配列共分散と比較してください。データの読み取り時に変換は不要であり(たとえば、文字列参照のビットパターンはオブジェクト参照と同じです)、要素サイズはすべての参照型で同じです。

つまり、somethingはループで変換を実行する必要があります。これを行うための組み込みメソッドを知りません。それらはどこかのサードパーティライブラリに存在すると確信していますが、それらのライブラリの1つをすでに使用している場合を除いて、独自のメソッドを作成するだけです。便宜上、実装例を次に示します。

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;
}
30
Jon Skeet

Java 8では、本当に必要な場合は、次のことを実行できます。

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

しかし、Jon Skeetの関数を使用する方が(よりクリーンで、より速く、より良いセマンティクス)優れています。

7

実際にfloat配列をdouble配列にコピーする必要がありますか? floatを使用するときにコンパイラと型に問題がある場合は、これを使用できます...

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

コピーを取ることでどのような利点がありますか?フロートに基づく計算結果の精度を高める必要がある場合は、結果をdoubleにします。配列のコピーを作成し、コピー機能を実行することには、特にサイズが大きい場合に、かなり多くの欠点が見られます。あなたが本当にそれをする必要があることを確認してください。

HTH

1
Simon