我需要在Java中将double转换为int,但数值必须始终向下舍入。即99.99999999 - > 99
答案 0 :(得分:130)
转换为int会隐式删除任何小数。无需调用Math.floor()(假设为正数)
简单地使用(int)进行类型转换,例如:
System.out.println((int)(99.9999)); // Prints 99
这就是说,它确实有一种与Math.floor
不同的行为,它向负无穷大方向发展(@Chris Wong)
答案 1 :(得分:29)
将一个double转换为int并将其四舍五入到最接近的整数(即与典型的(int)(1.8)
和(int)(1.2)
不同,这两者都将“向下舍入”朝向0并返回1
),只需将double
添加0.5即可将int
添加到<{1}}。
例如,如果我们有
double a = 1.2;
double b = 1.8;
然后x和y的以下类型转换表达式将返回向下舍入的值(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
作为一个小注释,此方法还允许您控制double
在(int)
上向上或向下舍入的阈值类型转换。
(int)(a + 0.8);
来进行类型转换。只要十进制值大于或等于0.2,这只会累计到(int)a + 1
。也就是说,通过在类型转换之前立即向double
添加0.8,在(int)
类型转换时将10.15和10.03向下舍入为10,但10.23和10.7将向上舍入为11。
答案 2 :(得分:17)
(INT)99.99999
将是99.将一个double转换为int不会舍入,它将丢弃小数部分。
答案 3 :(得分:11)
Math.floor(n)
其中n是双精度数。这似乎实际上会返回一个双精度,所以请确保在之后对其进行类型转换。
答案 4 :(得分:5)
这很好int i = (int) dbl;
答案 5 :(得分:5)
new Double(99.9999).intValue()
答案 6 :(得分: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
可能这些代码会帮助你。
答案 7 :(得分:0)
尝试使用Math.floor。
答案 8 :(得分: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
的输出。