Java 如何将双精度的秒转换为两个整数';秒和毫秒?

Java 如何将双精度的秒转换为两个整数';秒和毫秒?,java,int,double,Java,Int,Double,我有一个表示秒的任意双精度变量,我希望将其转换为两个整数,这样我就可以添加到Calendar对象中,但我不知道如何将双精度基本上分解为十进制和整数值。如果有更好的实现可以在日历中添加双秒变量的话,我愿意接受其他实现 Double someDouble = 2.5; int seconds = 0, milli = 0; //Get seconds to = 2, milli to = 500 from someDouble (pad with zeroes to get three place

我有一个表示秒的任意双精度变量,我希望将其转换为两个整数,这样我就可以添加到Calendar对象中,但我不知道如何将双精度基本上分解为十进制和整数值。如果有更好的实现可以在日历中添加双秒变量的话,我愿意接受其他实现

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);

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

int seconds = (int)someDouble.doubleValue();
int milli = (int)((someDouble.doubleValue() - seconds) * 1000);
这里发生的是:

  • 您只需将double转换为(int)即可得到整数部分,即秒数
  • 从双精度中减去秒,得到0.5,然后每1000乘以一次,因为它们是毫秒,然后再次将其转换为(int)
  • 如果使用了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);
    

    使用整数算术:

    int seconds = someDouble.intValue();
    int millis = (int)(someDouble * 1000) % 1000;
    
    Double类提供了
    intValue()
    方法,因此这就是
    seconds
    排序


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

    回答得不错。我相信第2行中的
    (double)
    强制转换是不必要的。你是对的,当我需要一个double值时,我总是转换为double,但在这种情况下是不必要的,我删除了它。首先,
    double someDouble
    应该是
    double someDouble
    。如果你不理解基本类型和对象之间的区别,我建议你研究一下它们。@Code peedient我们甚至不知道OP是否控制输入。