如何将Double中的秒转换为两个int的秒和毫秒?

时间:2014-09-08 23:03:24

标签: java int double

我有一个任意的Double变量代表秒,我想转换成两个整数,所以我可以添加到Calendar对象,但无法弄清楚如何基本上将double分成十进制和整数值。如果存在任何更好的实现以将Double秒变量添加到日历中,我将对其他实现开放。

Double someDouble = 2.5;
int seconds = 0, milli = 0;

//Get seconds to = 2, milli to = 500 from someDouble (pad with zeroes to get three places)

Calendar someCalendar = Calendar.getInstance();
someCalendar.add(Calendar.SECOND, seconds);
someCalendar.add(Calendar.MILLISECOND, milli);

2 个答案:

答案 0 :(得分:2)

您不需要使用日历,有一种更快捷的方法:

int seconds = (int)someDouble.doubleValue();
int milli = (int)((someDouble.doubleValue() - seconds) * 1000);

这里发生的是:

  1. 您只需将double转换为(int)即可获得整数部分,即秒数
  2. 你从double中减去秒数,得到0.5,然后乘以每1000个因子它们是毫秒,然后再将它转换为(int)
  3. 如果不是Double而是double,那么doubleValue()调用也可以省略:

    double dtime = 2.5d; // or someDouble.doubleValue() if you need to convert
    int seconds = (int)dtime;
    int milli = (int)((dtime - seconds) * 1000);
    

答案 1 :(得分:0)

使用整数运算:

int seconds = someDouble.intValue();
int millis = (int)(someDouble * 1000) % 1000;

Double类提供了intValue()方法,因此排除了seconds

millis只是将毫秒数除以1000之后的余数,因此模数运算符%就是您所需要的(秒数与此计算无关)。