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

时间:2010-01-26 23:23:24

标签: java casting

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

9 个答案:

答案 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 = 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);

来进行类型转换。只要十进制值大于或等于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的输出。