在 Java 中将双精度值转换为整数

2022-08-31 08:07:11

在Java中,我想将双精度转换为整数,我知道如果你这样做:

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

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

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

你可能会得到2。但是,我想知道:由于整数的双重表示有时看起来像1.99999999998或类似的东西,那么通过Math.round()创建的双精度是否仍然会导致截断的数字,而不是我们正在寻找的舍入数字(即:1而不是所表示的代码中的2)?

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

如果是这样:有没有更好的方法将双打变成一个圆润的int,而不会有截断的风险?


图了一些东西:Math.round(x)返回一个长整型,而不是一个双精度型。因此:Math.round() 不可能返回一个看起来像 3.9999998 的数字。因此,int(Math.round())将永远不需要截断任何东西,并且将永远有效。


答案 1

是否有可能铸造一个通过创建的双精度仍会导致截断的向下编号Math.round()

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

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

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

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

答案 2

对于 数据类型 为 ,可以使用以下命令:Doubleint

Double double = 5.00;

int integer = double.intValue();