如何通过四舍五入来将double转换为Java中的int?

我需要在Java中将double赋值为int,但是数值必须总是舍入。 即99.99999999 – > 99

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

简单地用(int)进行types转换,例如:

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

这就是说,它与Math.floor具有不同的行为,它向负无穷(@Chris Wong)

为了将一个double转换为一个int,并将其四舍五入到最接近的整数 (即不像典型的(int)(1.8)(int)(1.2) ,它将向下舍入到0并返回1将0.5添加到您将要types化为intdouble

例如,如果我们有

 double a = 1.2; double b = 1.8; 

然后下面的types为x和y的expression式将返回下舍入值( 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 

作为一个小提示 ,这个方法还允许你控制在(int)types转换时double被四舍五入的阈值

 (int)(a + 0.8); 

到types转换。 只要十进制数值大于或等于0.2,这个数就只能加到(int)a + 1 。 也就是说,通过在types转换之前加上0.8,10.15和10.03在(int)types转换时被舍入到10,而10.23和10.7被转换为11。

(INT)99.99999

将会是99.将一个double转换为一个int不会舍去,它将丢弃小数部分。

 Math.floor(n) 

其中n是双倍。 这实际上会返回一个双精度,所以确保你在后面进行types转换。

这工作得很好int i = (int) dbl;

new Double(99.9999).intValue()

尝试使用Math.floor。

试试这个,这很简单

 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 

可能这些代码会帮助你。