在java中将double转换为整数

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

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

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

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

你可能会得到2.但是,我想知道:因为整数的双重表示有时看起来像1.9999999998什么的,是否有可能通过Math.round()创建一个double仍然会导致截断的数字,而不是比我们正在寻找的四舍五入的数字(例如:代码中的1代替2代表)?

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

如果是这样的话:是否有更好的方法来将一个二进制变成一个四舍五入整数而不会有被截断的风险?


发现一些东西:Math.round(x)返回一个long,而不是double。 因此:Math.round()不可能返回一个看起来像3.9999998的数字。 因此,int(Math.round())将永远不需要截断任何东西,并始终工作。


是否有可能通过Math.round()创建一个double将仍然会导致截断的数字

不, round()将始终将您的double加到正确的值上,然后将它转换为将截断任何小数位的long 。 但四舍五入后,将不会有任何小数部分剩余。

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

返回距参数最近的长度。 结果通过加1/2来四舍五入为整数,取结果的底部,并将结果转换为长整型。 换句话说,结果等于表达式的值:

(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);

解决了我的目的。

链接地址: http://www.djcxy.com/p/85535.html

上一篇: converting double to integer in java

下一篇: Whats the largest denormalized and normalized number?(64bit, IEE 754