将双精度浮点数转换为整数,向下取整

57

如何将 double 值转换为 int,并执行以下操作:

Double If x = 4.97542. Convert to int x = 4.

Double If x = 4.23544. Convert to int x = 4.

也就是说,答案总是向下取整。

5个回答

107

如果你将 double 明确地强制转换为 int,那么小数部分会被截断。例如:

int x = (int) 4.97542;   //gives 4 only
int x = (int) 4.23544;   //gives 4 only

此外,如果您希望返回 double 值,并且想要将值舍入,则可以使用 Math.floor() 方法。


"失去小数值"是什么意思?它会得到与调用 Math.floor() 相同的数字吗? - Samuel Edwin Ward
一个Double不是一个Integer,所以强制转换不起作用。请注意Double类和double原始类型之间的区别。还要注意,Double是一个Number,因此它具有intValue方法,您可以使用该方法将值作为原始int获取。如果您尝试将Double转换为int,则会收到一个转换异常:java.lang.ClassCastException: java.lang.Double无法转换为java.lang.Integer。 - Ali Rad
1
只有对于正值,取整才会向下取整,如果你的数值可能为负数,你必须先进行向下取整。 - Kroppeb

32

如果这个double是一个带有大写D(即一个装箱原始值)的 Double

Double d = 4.97542;
int i = (int) d.doubleValue();

// or directly:
int i2 = d.intValue();

如果double已经是原始的double类型,那么你只需将其转换:

double d = 4.97542;
int i = (int) d;

请问Double和double有什么区别? - Muhammed Refaat
1
一个double是一个原始的浮点值。而Double是Java对象。 - penguin
1
这仅适用于正值。 - Kroppeb

5
double myDouble = 420.5;
//Type cast double to int
int i = (int)myDouble;
System.out.println(i);

双精度浮点型的值为420.5,应用程序输出整数值420。

2

另一个选择是使用Doubledouble,并使用Double.valueOf(double d).intValue();。简单而干净。


-1

我认为我的输出更好,特别是对于双精度数据类型的排序。

虽然这个问题已经被标记为已回答,但也许这会帮助其他人;

Arrays.sort(newTag, new Comparator<String[]>() {
         @Override
         public int compare(final String[] entry1, final String[] entry2) {
              final Integer time1 = (int)Integer.valueOf((int) Double.parseDouble(entry1[2]));
              final Integer time2 = (int)Integer.valueOf((int) Double.parseDouble(entry2[2]));
              return time1.compareTo(time2);
         }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接