每个数字 class 都有 primitive 替代( Double vs double , Integer vs int ,...) . 请注意,这些基元以小写字符开头(例如 int ) . 这告诉我们他们没有方法 . 相比之下,类(例如 Integer )就像这些基元周围的盒子/包装器一样,这使得它们可以像对象一样使用它们 .
// null-safe and with better rounding
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = Integer.valueOf(rounded);
Double d = 5.25;
Integer i = d.intValue(); // i becomes 5
要么
double d = 5.25;
int i = (int) d;
3
只需使用Double的intValue方法即可
Double initialValue = 7.12;
int finalValue = initialValue.intValue();
0
我看到三种可能性 . 前两个截断数字,最后一个截止到最近的整数 .
double d = 9.5;
int i = (int)d;
//i = 9
Double D = 9.5;
int i = Integer.valueOf(D.intValue());
//i = 9
double d = 9.5;
Long L = Math.round(d);
int i = Integer.valueOf(L.intValue());
//i = 10
0
简单地这样做......
Double d = 13.5578;
int i = d.intValue();
System.out.println(i);
37
像这样:
Double foo = 123.456;
Integer bar = foo.intValue();
5
你可以通过使用“Narrowing or Explicit type conversion”,double→long→int来实现 . 我希望它能奏效 .
double d = 100.04;
long l = (long)d; // Explicit type casting required
int i = (int)l; // Explicit type casting required
17 回答
使用
doubleNumber.intValue();
方法 .它对我有用 . 试试这个:
在
Double
对象上调用intValue()
.Double
不是Integer
,因此演员阵容无效 . 注意Double
class 和double
primitive 之间的区别 . 另请注意Double
是Number
,so it has the methodintValue
,您可以使用它来获取原始值int
.我认为如果不覆盖其背后的_539617,就无法理解其他答案 .
您无法直接将
Integer
转换为Double
对象 . 此外Double
和Integer
是不可变对象,因此您无法以任何方式修改它们 .每个数字 class 都有 primitive 替代(
Double
vsdouble
,Integer
vsint
,...) . 请注意,这些基元以小写字符开头(例如int
) . 这告诉我们他们没有方法 . 相比之下,类(例如Integer
)就像这些基元周围的盒子/包装器一样,这使得它们可以像对象一样使用它们 .战略:
要将
Double
转换为Integer
,您需要遵循以下策略:将
Double
对象转换为原始double
. (= "unboxing")将原语
double
转换为原语int
. (= "casting")将原语
int
转换回Integer
对象 . (= "boxing")在代码中:
实际上有一条捷径 . 您可以立即从
Double
直接拆箱到原始int
. 这样,您可以完全跳过第2步 .陷阱:
但是,上面的代码中没有涉及很多内容 . 上面的代码是 not null-safe.
现在它适用于大多数值 . 但是,与
Double
相比,整数的范围(最小/最大值)非常小 . 最重要的是,双打也可以保持"special values",整数不能:1/0 =无穷大
-1/0 = -infinity
0/0 =未定义(NaN)
因此,根据应用程序的不同,您可能需要添加一些过滤以避免令人讨厌的异常 .
然后,下一个缺点是舍入策略 . 默认情况下,Java将始终向下舍入 . 四舍五入在所有编程语言中都非常有意义 . 基本上Java只是丢掉了一些字节 . 在财务应用程序中,您肯定希望使用半向上舍入(例如:
round(0.5) = 1
和round(0.4) = 0
) .自动 - (联合)拳击
你可能会试图在这里使用auto-(un)boxing,但我现在还没有被卡住,那么接下来的例子也不会那么明显 . 如果你没有_539655使用它 .
我想以下不应该是一个惊喜 . 但如果是,那么你可能想阅读一些关于Java中的转换的文章 .
首选valueOf:
另外,不要试图使用
new Integer()
构造函数(正如其他一些答案所提出的那样) .valueOf()
方法更好,因为它们使用缓存 . 使用这些方法是一个好习惯,因为它们会不时地为你节省一些记忆 .Double和Integer分别是double和int的Java原语的包装类 . 你可以在这些之间施放,但你将失去浮点 . 也就是说,转换为int的5.4将是5.如果你将它转换回来,它将是5.0 .
还应该补充一点,它适用于自动装箱 .
否则,你得到一个int(原始),然后从那里得到一个Integer:
实际上,最简单的方法是使用
intValue()
. 但是,这只返回整数部分;它没有做任何舍入 . 如果希望Integer最接近Double值,则需要执行以下操作:并且不要忘记空案例:
Math.round()
处理奇怪的鸭子情况,如无限和NaN,相对优雅 .您需要使用方法intValue()显式获取int值,如下所示:
要么
只需使用Double的intValue方法即可
我看到三种可能性 . 前两个截断数字,最后一个截止到最近的整数 .
简单地这样做......
像这样:
你可以通过使用“Narrowing or Explicit type conversion”,double→long→int来实现 . 我希望它能奏效 .
PS:它将给出0,因为double具有所有小数值而左侧没有任何内容 . 在0.58的情况下,它会将其缩小到0.但对于其他人来说它会做出魔力 .
内存效率高,因为它将共享已创建的Double实例 .
试试这个