在Java中,我想把一个双数转换成一个整数,我知道你是否这样做。
double x = 1.5;
int y = (int)x;
你会得到y=1。如果你这样做
int y = (int)Math.round(x);
你就有可能得到2。然而,我想知道:由于整数的双数表示有时看起来像1.9999999998或其他什么,是否有可能通过Math.round()创建的双数仍然会导致一个被截断的数字,而不是我们正在寻找的四舍五入的数字(即:在表示的代码中是1而不是2)?
(是的,我确实是这个意思。有没有**的x值,y会显示一个截断的结果,而不是四舍五入的x的代表?)
如果是这样的话:有没有更好的方法将双倍数变成四舍五入的int,而不会有截断的风险?
我发现:Math.round(x)返回的是一个长数,而不是一个双数。因此:Math.round()不可能返回一个看起来像3.9999998的数字。因此,int(Math.round())永远不需要截断任何东西,而且永远有效。
通过`Math.round()'创建的双数,是否仍有可能导致一个被截断的数字。
不会,round()
总是将你的双数四舍五入到正确的值,然后,它将被投到一个`long',这将截断任何小数位。 但是在四舍五入之后,不会有任何小数部分残留。
下面是 Math.round(double)
的文档。
返回与参数最接近的长数。结果被四舍五入为整数,方法是加1/2,取结果的下限,并将结果转换为long类型。换句话说,结果等于表达式的值。
(long)Math.floor(a + 0.5d)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
解决了我的目的。