2

私は double 値の配列を持っていますが、最後の値は実際には長いミリ秒単位の時間を表します。したがって、配列に収まるように、この long を double に変換する必要があります。後でこの long 値を取得するときに、long 型に戻す必要があります。double の配列から取得した後の long 値が、配列に入れる前の値 (1 ミリ秒まで) とまったく同じであることが重要です。配列内にある間、long 値に対して実行される操作は一切ありません。質問は次のとおりです。
単純に long 値を double にキャストし、取得時に long にキャストする必要がありますか? これは私の long の正確な値を保持しますか?
または、Double.longBitsToDouble(time) メソッドを使用して long を配列​​に入れ、Double.doubleToLongBits(time) で取得する必要があります。
または、Double.longBitsToDouble(time) を使用して long 値を配列に入れ、単純に long 型にキャストしてエンコードされた long を取得する必要がありますか?
よろしくお願いいたします。

4

2 に答える 2

5

つまり、あなたがすべきことは、異なることを意味する値を表すために配列を使用しないことです...

しかし、それがどのように聞こえるかから、すべての値に対して完全な精度を与えることはできないためDouble.longBitsToDouble、を使用する以外に選択肢はありません。toをキャストするだけでは、精度が低下します。doublelonglongdouble

于 2012-06-13T20:06:26.897 に答える
3

基本的にdouble配列と単一のlong値のコンテナであるカスタムクラスを作成します。異なるタイプのデータを格納するために、または配列の特定の要素を異なる目的で使用することを目的として、配列を使用しないでください。

を使用した例List<double>

public class DoublesWithTimestampStructure
{
    private List<double> doubles;
    private long timestamp;

    public DoublesWithTimestampStructure()
    {
        this.doubles = new List<double>();
        this.timestamp = 0;
    }

    /*
    ... getter and setter methods, miscellaneous methods, etc.
    */
}
于 2012-06-13T20:11:16.683 に答える