在java中将double转换为整数

在Java中,我想将一个double转换为一个整数,我知道如果你这样做:

double x = 1.5; int y = (int)x; 

你得到y = 1。 如果你这样做:

 int y = (int)Math.round(x); 

你可能会得到2.但是,我想知道:因为整数的双重表示有时看起来像1.9999999998什么的,是否有可能通过Math.round()创build一个double仍然会导致一个截断的数字,而不是比我们正在寻找的四舍五入的数字(即:代码中的1代替2代表)?

(是的,我的意思是这样的:是否有任何价值的X,其中Y将显示一个结果是一个截断,而不是一个舍入表示的X?)

如果是这样的话:有没有更好的方法来使一个四舍五入的整数没有运行截断的风险?


想了一些东西:Math.round(x)返回一个long,而不是double。 因此:Math.round()不可能返回一个看起来像3.9999998的数字。 因此,int(Math.round())将永远不需要截断任何东西,并将始终工作。

是否有可能通过Math.round()创build一个double将仍然会导致截断的数字

不, round()将总是把你的double加到正确的值上,然后,它会被转换成一个long整数,将会截断任何小数位。 但四舍五入后,将不会有任何部分剩余。

这里是来自Math.round(double)的文档:

返回与参数最接近的长度。 结果通过加1/2来舍入到一个整数,取结果的底部,并将结果输出为long。 换句话说,结果等于expression式的值:

 (long)Math.floor(a + 0.5d) 

对于数据typesDoubleint ,可以使用以下内容:

 Double double = 5.00; int integer = double.intValue(); 

Double perValue = 96.57; int roundVal =(int)Math.round(perValue);

解决了我的目的。

 double a = 1.450; String sa = String.valueOf(a); int lengthUntilPoint = sa.indexOf(".")+1; int power = sa.length() - lengthUntilPoint; int ia = (int) (a* Math.pow(10, power));