Android / Java长数学有时偏小一点

时间:2013-01-26 04:12:55

标签: java android math long-integer

我有一个小问题,我似乎无法弄清楚。我从两个压缩器中获取时间,以毫秒为单位,减去它们,并将结果除以得到两天中的两个压延器的差值。如果重复完成,有时候这个数学将被一个小的小数点,通常是.0000001。有办法解决这个问题吗?注意:我需要将这些数字保留为较长的值,因为它们会在一段时间后变得很大。

下面是代码:

首先我得到了压缩日期的值,以毫秒为单位......

    final long calendarOne = datePickerCalendar
             .getTimeInMillis();

    final long calendarTwo = actualCalendar
             .getTimeInMillis();

然后我减去这两个数字......

    if(calendarOne > calendarTwo)
    {

         long differenceInMilliseconds = (long)
             (calendarOne) - (calendarTwo);

    }

differenceInMilliseconds的值将如下变化,两个日历之间没有任何变化。

正确号码:63417600000

错误号码:63417599999

错误号码:63417599997

大部分时间数学都会出现正确的数字,但我无法弄清楚为什么会出现差异。我在数学方面做错了吗?或者有没有办法绕过多头?

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

  

大部分时间数学都会出现正确的数字,但我无法弄清楚为什么会出现差异。我在数学方面做错了吗?或者有没有办法绕过多头?

不,不。从另一个整数中减去一个整数时没有舍入。

可能的原因在于创建两个日历对象的方式。我怀疑他们是从系统时钟获取初始值,并且在某些情况下,在相应的创建时间之间有足够长的时间在毫秒级时间值中显着。

答案 1 :(得分:1)

创建actualCalendar后,执行actualCalendar.set( MILLISECOND, 0 ),同样在datePickerCalendar上执行相同操作,您将确保两者之间的差异至少为一秒。应该解决您的问题,因为这可能是由于创建两个日历之间的延迟。