【发布时间】:2016-02-05 15:02:44
【问题描述】:
我在我的代码中使用 countDownTimer。问题是,倒数计时器不准确。 onTick 方法不会总是每秒执行一次,它可能会延迟几毫秒。当尝试基于millisUntilFinished 执行某个任务时,这会成为一个问题。当我的 20 秒计时器中的 10 秒过去时,我正在尝试记录:
以下是相关代码:
if (millisUntilFinished == 10000) { //TEN SECONDS
Log.v(TAG, "TEN SECONDS LEFT");
}
问题出现在这里,因为 countDownTimer 甚至可能永远不会拥有 millisUntilFinished == 10000,它可能等于 1001,因此我的代码不会执行。无论如何以某种方式将millisUntilFinished(很长)四舍五入到最接近的数千?我尝试了以下方法:
millisUntilFinishedRounded = MathUtils.round((double) millisUntilFinished, -3); // nearest thousand, 2000.0
但我无法解析“MathUtils”
我迷路了。我非常感谢任何反馈(正面或负面)!非常感谢您的所有帮助。
{Rich}
【问题讨论】:
-
((500 + millisUntilFinished) / 1000) * 1000将正值四舍五入到最接近的 1000。但您也可以使用(millisUntilFinished >= 9500 && millisUntilFinished < 10500)作为您的条件。 -
或者如果你想一次性执行一些代码。只需检查millisUntilFinished
-
@AndyTurner 感谢您的宝贵时间,我们为什么要添加 500 个?
-
如果要四舍五入到最接近的 1000,则需要添加 500,而不是四舍五入到最接近的 1000。例如对于 750:
(750 + 500) / 1000 * 1000 = 1000,而750 / 1000 * 1000 = 0。 -
@AndyTurner 您的回答有效!我有点困惑为什么......不是900/1000 = 0.9吗? 0.9 x 1000 = 9000,而不是 10000;为什么这仍然有效?它是从 0.9 -> 1 向上取整吗?如果是这样,如果商高于 1 但低于 2,它会如何工作,它还会再次四舍五入到 2 吗?非常感谢您的回答,一旦这些问题得到回答,我会将其标记为最佳答案并喜欢您的帖子! :)
标签: java android math timer clock