我有一个小问题,我似乎无法弄清楚。我从两个砑光机获取以毫秒为单位的时间,减去它们,然后将结果除以得到两个砑光机的天数之差。重复进行时,有时此数学运算会出现小数点偏差,通常为 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/