第一种方法:
long mySeconds = milliseconds/ 1000;
第二种方法:
double mySeconds = milliseconds * 1e-3d;
这个计算最终用来确定数组的索引,如下所示:
int index = (int) ((someDoubleSeconds + mySeconds)/ someDouble);
这两种方法有什么区别?
第一种方法是否会向下取整
,还是四舍五入到下一秒
?
第一种方法:
long mySeconds = milliseconds/ 1000;
double mySeconds = milliseconds * 1e-3d;
int index = (int) ((someDoubleSeconds + mySeconds)/ someDouble);
这两种方法有什么区别?
第一种方法是否会向下取整
,还是四舍五入到下一秒
?
正如其他人所指出的,第一种方法会截断(在这种情况下实际上是向下取整),而第二种方法则不会。因此,如果milliseconds
为10999,则第一种方法可以得到10
,而第二种方法可以得到10.999
。
这对第三行有什么影响?考虑如果someDoubleSeconds = 0
且someDouble = 10.5
。那么,如果milliseconds
为10999,则你的mySeconds
可以是10或10.999,并且第三行的结果可以是0或1。(因为10/10.5小于1,将被强制转换为int后将被截断为0,而10.999/10.5大于1,将被强制转换为int后将被截断为1)
第一个是整数除法,这意味着例如如果你有
long mySeconds = 1234
除以1000后,您将得到1。
第二种方法将给您一个准确的双精度浮点数,我认为您不需要。一秒半是否适合您?
第三种方法由于双重舍入到整数而有些复杂。请参阅Java语言规范:
将浮点数转换为整型T的缩小转换需要两个步骤:顺便提一下,在Java标准库中有一种很好的方法可以转换时间单位:java.util.concurrent.TimeUnit。
(int)
强制转换,而不是之前的操作。) - Hot Licks