将double类型转换为long类型而不强制转换的最佳方法是什么?
例如:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
将double类型转换为long类型而不强制转换的最佳方法是什么?
例如:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
当前回答
Guava Math库有一个专门设计用于将double转换为long的方法:
long DoubleMath.roundToLong(double x, RoundingMode mode)
您可以使用java.math.RoundingMode来指定舍入行为。
其他回答
首选的方法应该是:
Double.valueOf(d).longValue()
来自Double (Java Platform SE 7)文档:
Double.valueOf(d)
返回表示指定Double值的Double实例。 如果不需要新的Double实例,则应该使用此方法 通常优先于构造函数Double(Double), 因为这种方法很可能产生明显更好的空间和时间 缓存频繁请求值的性能。
简单地说:
double d = 394.000;
long l = d * 1L;
简单地说,强制转换比创建Double对象更有效。
假设你对截断为0感到满意,只需强制转换:
double d = 1234.56;
long x = (long) d; // x = 1234
这将比使用包装器类更快——更重要的是,它更具可读性。现在,如果你需要舍入而不是“总是趋近于0”,你将需要稍微复杂一些的代码。
... 这是舍入法,不会截断。赶紧在Java API手册里查了一下:
double d = 1234.56;
long x = Math.round(d); //1235