如何在不进行转换的情况下将double转换为long?

问题

没有强制转换,将double转换为long的最佳方法是什么?

例如:

double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);

#1 热门回答(199 赞)

假设你对截断为零感到满意,只需投射:

double d = 1234.56;
long x = (long) d; // x = 1234

这比通过包装类更快 - 更重要的是,它更具可读性。现在,如果你需要舍入而不是"总是向零",你需要稍微复杂的代码。


#2 热门回答(101 赞)

......这是不会截断的舍入方式。匆匆在Java API手册中查找:

double d = 1234.56;
long x = Math.round(d);

#3 热门回答(33 赞)

(new Double(d)).longValue()内部只进行强制转换,因此没有理由创建Double对象。