2010-01-26 25 views
62

我需要在Java中将double转换为int,但数值必须总是舍入。即99.99999999-> 99如何通过四舍五入将double转换为Java中的int值?

+0

可能的重复[如何将float转换为int与Java](http://stackoverflow.com/questions/1295424/how-to-convert-float-to-int-with-java) – 2015-01-26 12:50:04

+0

我相信浮动而双打是Java中不同的数据类型。 – badpanda 2015-01-27 05:20:45

+0

我认为它们太靠近了,因为它们都是基元和浮点类型。答案是一样的,很可能会继续如此。 – 2015-01-27 07:02:56

回答

116

投射到一个int将隐含地丢弃任何小数。无需调用Math.floor()(假设为正数)

只需使用(INT)类型转换,如:

System.out.println((int)(99.9999)); // Prints 99 

话虽如此,但它从Math.floor这轮负向调整有不同的行为无穷大(@克里斯黄)

+22

请注意'Math.floor' *确实会产生一个与简单类型转换不同的结果。 – Joey 2010-01-26 23:40:42

+3

这取决于OP的意思是“下舍入”。演员将它向下“向下”转向零,而Math.floor向负无穷转弯。 – 2011-12-15 03:24:38

+5

另请注意,int不能表示double可能的所有可能的整数值。如果你想截断一个双精度值,然后像long一样强制转换为一个64位整数值。 'System.out.println((long)(9.9999e300));' – 2012-07-02 18:09:17

10
Math.floor(n) 

其中n是双数。这实际上会返回一个双精度,所以确保你在后面进行类型化。

+2

施放前无需发言,请参阅Xorlev的回答。 – Mizipzor 2010-01-26 23:30:06

+5

@miz:虽然,负数的语义不同。 – Joey 2010-01-26 23:41:52

0

尝试使用Math.floor。

+0

地板()不需要。 – TBH 2010-01-26 23:36:11

16

(INT)99.99999

将是99铸造双为int不圆的,它会丢弃小数部分。

+4

+1提截。 – 2012-07-02 18:09:10

26

蒙上了双为int,并将它四舍五入到最接近的整数(即不同于典型(int)(1.8)(int)(1.2),这都将“四舍五入”向0,回到1) ,只需加上0.5到double,你就可以输入int

例如,如果我们有X和Y

double a = 1.2; 
double b = 1.8; 

然后将下面的类型转换表达式和将返回四舍五入降值(x = 1y = 1):

int x = (int)(a); // This equals (int)(1.2) --> 1 
int y = (int)(b); // This equals (int)(1.8) --> 1 

但通过添加0.5到每个,我们将获得四舍五入到最接近的整数结果,我们可能在某些情况下需要(x = 1y = 2):

int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1 
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2 

作为一个小纸条,这种方法也可以让你控制门槛在该double被四舍五入后(int)类型转换。

(int)(a + 0.8); 

to typecast。每当十进制值大于或等于0.2时,这将只会加起来到(int)a + 1。也就是说,通过在类型转换之前将double加0.8,10.15和10.03将在类型转换为(int)时舍入为10,但10.23和10.7将舍入到11。

+5

你完全正确,但没有。我看到Google的“Java int typecast double”引发了这个线程,并且认为有人正在寻找一种直接使用(int)类型转换向上/向下舍入的方法,可以使用它。这不是使用一个计算器帐户发布的(所以我不想提高我的声誉,如果这在这里被认真对待),只是试图帮助传播我经常使用的一个很酷的技巧。 :)干杯! – JavaDrip 2012-07-02 18:23:07

+4

不错,但请记住这只适用于**正**双打。例如,如果你用这个技巧取整-0.8,那么代码'System.out.println(“”+(int)( - 0.8d + 0.5))'打印0,而不是-1 – 2014-01-23 19:53:25

5

new Double(99.9999).intValue()

0

尝试用这个,这是一个简单的

double x= 20.22889909008; 
int a = (int) x; 

this will return a=20 

或尝试用这样的: -

Double x = 20.22889909008; 
Integer a = x.intValue(); 

this will return a=20 

或与此尝试: -

double x= 20.22889909008; 
System.out.println("===="+(int)x); 

this will return ===20 

可能是这些代码将帮你。