Java 如何从正在运行的时钟除以指定变量得到百分比
我有一段代码,其中变量date3来自日期选择器对话框Java 如何从正在运行的时钟除以指定变量得到百分比,java,time,percentage,chronometer,Java,Time,Percentage,Chronometer,我有一段代码,其中变量date3来自日期选择器对话框 @Override public void onTimeSet(TimePicker timePicker, int hour2, int minute2) { hour2final = hour2; minute2final = minute2; Calendar c = Calendar.getInstance (); c.setTimeInMillis (
@Override
public void onTimeSet(TimePicker timePicker, int hour2, int minute2) {
hour2final = hour2;
minute2final = minute2;
Calendar c = Calendar.getInstance ();
c.setTimeInMillis ( 0 );
c.set ( year2final, month2final, day2final, hour2final, minute2final, 0 );
date2 = c.getTimeInMillis ();
difference = date2 - date1;
Calendar c1 = Calendar.getInstance ();
c1.setTimeInMillis ( 0 );
c1.set ( year2final, month2final - 1, day2final, hour2final, minute2final, 0 );
date3 = c1.getTimeInMillis ();
difference3 = date3 - date;
ondatecountdowntext3 ();
我的计时器上的这个代码(作为一个计数计时器)
t1是计时表启动和运行的时间,t2(date3)是计时表运行到100%之前的总时间(以毫秒为单位)。问题是,当我尝试划分t1(运行时间)和t2(日期3“总时间”)时,texview tvp中的百分比并没有按我希望的那样运行。它一直保持在0%并且没有增加。有人有解吗?如果t2是整数,那么分数“t1*100/t2”是整数除法。你知道吗?其他想法:t1应该乘以1000,而不是100(t1是毫秒值)。如果t2=date3,t2是整数吗?只是澄清一下,因为date3=c1.getTimeInMillis();它应该是毫秒。如果我错了,请纠正我。无论如何,是的,*100应该是1000,我刚刚注意到了。我不知道
.getTimeInMillis()
是从哪里来的,但是对于System.currentTimeMillis()
它返回一个long。因此,t2
将是一个长/int。然后除以t2
得到一个长/int。换句话说,除以一个数字的数量将定义结果的类型(1/2->int
和1/2.0->double
)。问题是百分比分数的值不是int/long值,因此它停留在int/long值(0)上。因此t1、t2和百分比应为双精度/浮点值。要意识到这一点。谢谢兄弟,它解决了问题。
private void starttimercu() {
cupti.setBase ( SystemClock.elapsedRealtime () );
cupti.start ();
ondatecountdowntext3 ();
cupti.setOnChronometerTickListener ( new Chronometer.OnChronometerTickListener () {
@Override
public void onChronometerTick(Chronometer chronometer) {
t1 = SystemClock.elapsedRealtime () - chronometer.getBase ();
t2 = date3;
percentage = t1*100/t2;
tvp.setText ( percentage+"%" );
}
} );
}