我什么时候应该使用Double.longBitsToDouble(...)而不是简单地将long转换为double?

时间:2012-06-13 20:03:40

标签: java casting type-conversion primitive-types

我有一个double值数组,其中最后一个实际上是一个long表示时间(以毫秒为单位)。因此,需要将此long转换为double才能适合数组。稍后在检索此长值时,需要将其转换回long类型。从双精度数组中检索后的长值与将其放入数组之前的值完全相同(低至1毫秒)至关重要。在阵列中,对长值不执行任何操作。所以问题是:
我应该简单地将长值加倍并在检索时将其重新投入多长时间?这会保留我长期的确切价值吗?
或者我应该使用Double.longBitsToDouble(time)方法将long放入数组并使用Double.doubleToLongBits(time)检索它。
或者也许我应该使用Double.longBitsToDouble(time)将long值放入数组中并通过简单地将其转换为long类型来检索编码的long?
先谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

我的意思是,你应该做的是使用数组来表示意味着不同事物的价值......

但从听起来的情况来看,你别无选择,只能使用Double.longBitsToDouble,因为double无法让你对所有long值都有完全的精确度。只需将long转换为double就会失去精确度。

答案 1 :(得分: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.
    */
}