在Java中将double转换为整数

在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的截断而不是舍入的结果?)

如果是这样:是否有更好的方法将双精度数舍入为舍入型整数而不冒被截断的风险?


找到了一些东西:Math.round(x)返回一个long,而不是double。因此:Math.round()无法返回看起来像3.9999998的数字。因此,int(Math.round())无需截断任何内容,并且将始终有效。

回答:

是否有可能铸造通过创建的双精度孔Math.round()仍将导致截短的倒数

不,round()将始终将您的double取整到正确的值,然后将其强制转换为long,以截断任何小数位。但四舍五入后,将没有剩余的小数部分。

以下是来自的文档Math.round(double)

返回最接近参数的long。通过将结果加1/2,将结果取底,并将结果强制转换为long类型,将结果舍入为整数。换句话说,结果等于表达式的值:

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

以上是 在Java中将double转换为整数 的全部内容, 来源链接: utcz.com/qa/419858.html

回到顶部