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


76

我需要在Java中将double转换为int,但数值必须始终四舍五入。即99.99999999-> 99



我相信Java中的float和double是不同的数据类型。
badpanda

我认为它们太接近了,因为它们都是基元和浮点类型。答案是一样的,而且很可能会继续这样。
Ciro Santilli郝海东冠状病六四事件法轮功2015年

1
实际上,浮点问题是更准确地询问如何对浮点取整(根据一些未指定的取整标准)。这个问题可能更恰当地重命名为“如何在Java中将双精度取整为零并转换为int?” 类似于询问如何对双精度底数进行叠加,只不过这种情况下,四舍五入取整为负无穷大,而不是取整为零。尽管问题的标题相似,但答案却截然不同。
badpanda

Answers:


140

强制转换为int会隐式删除任何小数。无需调用Math.floor()(假设为正数)

只需使用(int)进行类型转换,例如:

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

话虽这么说,它的行为确实与Math.floor向负无穷大舍入的行为不同(@Chris Wong)


26
请注意,对于负数Math.floor 确实会产生与简单类型转换不同的结果。
乔伊(Joey)2010年

3
这取决于OP“向下舍入”的含义。强制转换将其“向下”舍入为零,而Math.floor舍入为负无穷。
Lambda Fairy

5
还要注意,一个int不能代表double可以代表的所有可能的整数值。如果希望截断双精度值,则将其强制转换为64位整数,例如long。 System.out.println((long)(9.9999e300));
门罗·托马斯

1
虽然IEEE 754舍入规则使用术语截断圆形,向零,并使用同义词本轮下跌地板进行舍入,向负无穷大,Java的BigDecimalRoundingMode类用途ROUND_DOWN为圆形,向零和ROUND_FLOOR的圆形towards-负无穷大。
安德烈亚斯

32

要将double转换为int并将其四舍五入到最接近的整数(即与典型的(int)(1.8)and不同(int)(1.2),它们都将朝0舍入并返回1),只需将0.5加到double您将要转换为an的int整数上即可

例如,如果我们有

double a = 1.2;
double b = 1.8;

然后,以下x和y的类型转换表达式将返回四舍五入的值(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);

进行类型转换。仅(int)a + 1在十进制值大于或等于0.2时才四舍五入。也就是说,通过double在紧临类型转换前加上0.8,可以在类型转换时将10.15和10.03舍入为10 (int),但是将10.23和10.7舍入为11。


6
您完全正确,事实并非如此。当Google-ing为“ Java int typecast double”时,我看到了该线程弹出,并且发现有人在寻找一种直接使用(int)typecast进行四舍五入的方法可以使用此线程。这不是使用stackoverflow帐户发布的(因此,如果要在这里认真对待,我就不会试图提高自己的声誉),只是试图帮助传播我经常使用的炫酷技巧。:)干杯!
JavaDrip 2012年

4
很好,但请记住,这仅适用于双打。例如,如果您使用此技巧四舍五入,则代码将System.out.println(""+ (int)(-0.8d + 0.5))输出0,而不是预期的-1
Gil Vegliach 2014年

17

(int)99.99999

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





1

试试这个,这很简单

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

可能这些代码会帮助您。



0

在这个问题上:

1.将双精度转换为整数是非常容易的任务。

2.但这不是将double值四舍五入到最接近的小数。因此,可以这样进行转换:

double d=99.99999999;
int i=(int)d;
System.out.println(i);

它将打印出来99,但是还没有四舍五入。

因此,为了四舍五入,我们可以使用

double d=99.99999999;
System.out.println( Math.round(d));

这将输出的输出100

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.