关于转换:在java中将double转换为整数

converting double to integer in java

在爪哇,我想把一个整数转换成整数,我知道如果你这样做:

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

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

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

你可能会得到2。然而,我想知道:由于整数的双表示形式有时看起来像1.9999999998或其他什么,是否有可能通过math.round()生成的双表示形式仍然会导致被截断的数字,而不是我们要查找的整数(即:在所表示的代码中,1而不是2)?

(是的,我的意思是这样的:有x的值吗,其中y将显示一个被截断的结果,而不是x的四舍五入表示?)

如果是这样的话:有没有更好的方法可以使double成为一个整数,而不存在截断的风险?

计算出一些东西:math.round(x)返回一个长的,而不是双的。因此:math.round()不可能返回3.999998这样的数字。因此,int(math.round())将不需要截断任何内容,并且始终有效。


is there a possibility that casting a double created via Math.round() will still result in a truncated down number

你将永远在round()双圆,到正确的值,然后,它将被截断到一个铸造long将任意位小数。但rounding后,会有不被任何剩余的部分配件。

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

Returns the closest long to the argument. The result is rounded to an integer by adding 1/2, taking the floor of the result, and casting the result to type long. In other words, the result is equal to the value of the expression:

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


在datatype intDouble),你可以使用下面的:

1
2
3
Double double = 5.00;

int integer = double.intValue();


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

解决我的用途。


1
2
3
4
5
6
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));