java - Android/Java 长数学有时会相差一个小小数

标签 java android math long-integer

我有一个小问题,我似乎无法弄清楚。我从两个砑光机获取以毫秒为单位的时间,减去它们,然后将结果除以得到两个砑光机的天数之差。重复进行时,有时此数学运算会出现小数点偏差,通常为 0.0000001。有办法解决这个问题吗?注意:我需要将这些数字保留为长值,因为一段时间后它们会变得很大。

代码如下:

首先我得到日历日期的毫秒值......

    final long calendarOne = datePickerCalendar
             .getTimeInMillis();

    final long calendarTwo = actualCalendar
             .getTimeInMillis();

然后我将这两个数字相减...

    if(calendarOne > calendarTwo)
    {

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

    }

在两个日历之间没有变化的情况下,differenceInMilliseconds 的值将发生如下变化。

正确号码:63417600000

号码错误:63417599999

号码错误:63417599997

大多数情况下,数学都会得出正确的数字,但我无法弄清楚为什么会出现差异。我在数学上做错了什么吗?或者有没有办法对多头进行四舍五入?

感谢您的帮助

最佳答案

The math comes up with the correct number most of the time but I can't figure out why there would be a discrepancy. Am I doing something wrong in my mathematics? Or is there a way to round longs?

不,不。当您从一个整数中减去另一个整数时,不会进行舍入。

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

关于java - Android/Java 长数学有时会相差一个小小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14533797/

相关文章:

java - 为 int 值设置限制

ios - 如何用 NSNumbers 做数学运算

java - 注释在混淆器中无效

java - 通过 Intent 传递图像

Android - SQLite AUTOINCRMENT 不增加主键

java - 改造更改 URL

java - 列出 Android 中所有可用的通知铃声

模运算符中的 C# 错误 %

java - Android WebView - 如何在页面完成后将 WebView 滚动到顶部?

java - 按值 x 递增,但它会按值 x-1 递增