【发布时间】:2016-05-17 03:14:01
【问题描述】:
我有这样的代码:
System.out.println("Math.round(1423562400L) => " + Math.round(1423562400L));
结果是这样的:
Math.round(1423562400L) => 1423562368
这个值是一个 64 位整数,但它很容易放入一个应该适合双精度的 32 位整数中。怎么回事?
【问题讨论】:
-
当你先投射到
(double)时它会起作用。显然,它是float,否则?! -
但是为什么
long会自动转换为float? -
@swdev JLS 15.12.2 表示 float 和 double 都适用,JLS 15.12.2.5 表示 float 是最具体的方法。