加长值会导致结果不一致

时间:2018-08-13 13:32:11

标签: java android long-integer addition chronometer

我开发了一个应用,该应用具有3个用于秒表的计时器。当第三个停止时,将给出一个total,它看起来非常简单和基本。

我正在测试3个测试设备,以确保该应用在投入生产之前的行为符合预期。

示例:

timeSetup = 00:00:05; 
timeProcessing = 00:00:10;
timeReconciliation = 00:00:05;
total = 00:00:20;

这就是我希望它在我的个人设备(即Samsung Galaxy s7,API 26)上正常运行的方式。

但是,在其他设备(例如API 25和API 22)上,结果是随机产生的,例如上述示例中的00:00:4700:00:45

代码:

   Long total = timeSetup + timeProcessing + timeReconciliation;
                    int h = (int) (total / 3600000);
                    int m = (int) (total - h * 3600000) / 60000;
                    int s = (int) (total - h * 3600000 - m * 60000) / 1000;
                    totaltime = (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s);

上面的代码是我计算total的方式。

是否存在将三个long值相加的更准确或一致的方法,或者设备之间不一致的原因是什么?

如何使用天文钟计算时间的示例代码:

 chronometerReconciliation.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometerChanged) {
            chronometerReconciliation = chronometerChanged;
            timeReconciliation = SystemClock.elapsedRealtime() - chronometerReconciliation.getBase();
            int h = (int) (timeReconciliation / 3600000);
            int m = (int) (timeReconciliation - h * 3600000) / 60000;
            int s = (int) (timeReconciliation - h * 3600000 - m * 60000) / 1000;
            timeShownReconciliation = (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s);
            chronometerReconciliation.setText(timeShownReconciliation);

任何帮助都会很棒!

0 个答案:

没有答案