如何通过四舍五入来将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化为int
的double
。
例如,如果我们有
double a = 1.2; double b = 1.8;
然后下面的types为x和y的expression式将返回下舍入值( x = 1
和y = 1
):
int x = (int)(a); // This equals (int)(1.2) --> 1 int y = (int)(b); // This equals (int)(1.8) --> 1
但是通过给每个加0.5,我们将得到在某些情况下( x = 1
和y = 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
可能这些代码会帮助你。