在 Java 中将 double 转换成整数

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

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

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

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

你可能会得到2分。然而,我想知道: 由于整数的双重表示有时看起来像1.999999998或其他什么,有没有可能通过 Math.round ()创建一个双重表示仍然会导致一个截断的向下数字,而不是我们正在寻找的四舍五入数字(即: 1代表的代码中的2) ?

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

如果是这样: 是否有更好的方法将一个 double 变成一个四舍五入的 int,而不会产生截断的风险?


计算结果: Math.round (x)返回一个 long,而不是 double。因此: Math.round ()不可能返回类似于3.9999998的数字。因此,int (Math.round ())将永远不需要截断任何内容,并且始终有效。

481968 次浏览

是否有可能铸造一个双通过 Math.round()创建仍然会导致一个截断下来的数字

不,round()将总是四舍五入您的双精度到正确的值,然后,它将被强制转换为一个 long,将截断任何小数位。但舍入后,将不会有任何小数部分剩余。

这是 Math.round(double)的文件:

返回与参数最接近的长度。将结果四舍五入为一个整数,方法是将结果的底数加1/2,并将结果转换为 long 类型。换句话说,结果等于表达式的值:

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

对于从 Doubleint的数据类型,可以使用以下方法:

Double double = 5.00;


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

解决了我的目标。