我正在做一个关于停车的练习。汽车停放5分钟后,需要支付1小时。所以我希望从下面的代码中获得int 1,但我得到的是0.一些提示?
GregorianCalendar data1 = new GregorianCalendar(2015,1,4,11,10);
GregorianCalendar data2 = new GregorianCalendar(2015,1,4,11,20);
long b =(data2.getTimeInMillis()-data1.getTimeInMillis())/1000/3600;
int k=(int)Math.ceil(b);
System.out.println(k);
答案 0 :(得分:2)
这应该有效:
GregorianCalendar data1 = new GregorianCalendar(2015,1,4,11,10);
GregorianCalendar data2 = new GregorianCalendar(2015,1,4,11,20);
double b =(data2.getTimeInMillis()-data1.getTimeInMillis())/1000.0/3600.0;
double k=Math.ceil(b);
System.out.println(k);
您想使用Math.ceil()
并使用double
,以便存储小数位。否则,当您进行减法并除以3600
时,最终可能会使用450 / 3600
,而使用long
,最终会得到0
,因此您会继续获得0
{{1}}。
答案 1 :(得分:1)
public static void main(String[] args) {
GregorianCalendar data1 = new GregorianCalendar(2015, 1, 4, 11, 10);
GregorianCalendar data2 = new GregorianCalendar(2015, 1, 4, 11, 20);
double b = (data2.getTimeInMillis() - data1.getTimeInMillis()) / (1000.0 * 3600.0);
System.out.println(b);
int k = (int) Math.ceil(b);
System.out.println(k);
}
<强>输出强>
0.16666666666666666
1
刷你的Math function here,作者非常好解释。
答案 2 :(得分:1)
尝试将代码重写为类似
的代码GregorianCalendar data1 = new GregorianCalendar(2015,1,4,11,10);
GregorianCalendar data2 = new GregorianCalendar(2015,1,4,11,20);
// b must be float
float b =(data2.getTimeInMillis()-data1.getTimeInMillis())/1000;
b = b /3600;
int k=(int)Math.ceil(b);
return k;
答案 3 :(得分:0)
两个人认为:
返回最大(最接近正无穷大)双精度值 小于或等于参数,等于数学 整数
这将返回0
返回大于或等于参数且等于数学整数的最小(最接近负无穷大)double值。
这将返回1,因为1是下一个更大的整数
答案 4 :(得分:0)
这是一个冗长且自我解释的例子。如果endTime
在startTime
之前(由于某种原因),它也处理这种情况。
GregorianCalendar startTime = new GregorianCalendar(2015, 1, 4, 11, 10);
GregorianCalendar endTime = new GregorianCalendar(2015, 1, 4, 11, 20);
long parkingTimeMillis = startTime.getTimeInMillis() - endTime.getTimeInMillis();
long hoursToPay = TimeUnit.MILLISECONDS.toHours(parkingTimeMillis) + 1;
System.out.println(hoursToPay);
答案 5 :(得分:0)
使用long b将输出设为0.使用double或float。长数据类型是64位带符号的二进制补码整数。因此无论你在RHS中做什么,它都会导致整数舍入。所以,让我们说你执行:
System.out.println((long) 1.9);
它的输出将是1而不是1.9。
所以尝试做
float b = (float) ((data2.getTimeInMillis() - data1.getTimeInMillis()) / 1000) / 3600;