在我的应用程序中,我有一个以毫秒为单位的时间(介于0到60000之间)除以某个值(在当前示例中为60000)然后,我将其乘以100。
但是,将答案打印到日志中时,它始终返回0.
这是我的代码:
lag
答案 0 :(得分:1)
The answer by user3818491为您提供了正确的解决方案。我想贡献现代版本。不要使用原始数字作为持续时间,使用Duration
类java.time(现代Java日期和时间API)。这意味着,首先声明activityDuration
一个Duration
,例如:
final Duration activityDuration = Duration.ofMinutes(1);
恕我直言,这已经比你的60000的价值更清晰了1分钟。
Duration timeLeft = Duration.ofMillis(timeLeftInMillis);
int minutes = (int) timeLeft.toMinutes();
int seconds = timeLeft.toSecondsPart();
String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
countDownTimerTextView.setText(timeLeftFormatted);
System.out.println("L: " + timeLeftInMillis); // Returns correctly. Values between 0 and 60000
System.out.println("Activity Duration: " + activityDuration); // Returns correctly. 60000
System.out.println("Progress: " + timeLeft.multipliedBy(100).dividedBy(activityDuration));
可能的输出是:
L: 25555
Activity Duration: PT1M
Progress: 42
在这种情况下,00:25
已填入您的文字视图。 PT1M
来自Duration.toString
并且意味着1分钟(它是ISO 8601格式,就像这样,如果需要,您将学会轻松阅读。)
在Java 9中引入了Duration.dividedBy(Duration)
方法。对于早期的Java版本和Android,请改为使用:
System.out.println(
"Progress: " + timeLeft.multipliedBy(100).toMillis() / activityDuration.toMillis());
结果是一样的。
是的,java.time
适用于较旧和较新的Android(仅适用于不适当的Java 9添加)。它只需要至少Java 6 。
org.threeten.bp
导入包含子包的日期和时间类,例如import org.threeten.bp.Duration;
。java.time
。Duration
class java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。答案 1 :(得分:0)
timeLeftInMillis / activityDuration
是整数除法,并且总是被截断为最接近的整数。
你需要在做divsion之前转换为float或double
((double)timeLeftInMillis / activityDuration) * 100)