Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中double到integer的转换_Java_Casting_Double_Rounding - Fatal编程技术网

Java中double到integer的转换

Java中double到integer的转换,java,casting,double,rounding,Java,Casting,Double,Rounding,在Java中,我想将一个double转换为一个整数,我知道如果您这样做: double x = 1.5; int y = (int)x; int y = (int)Math.round(x); 你得到y=1。如果您这样做: double x = 1.5; int y = (int)x; int y = (int)Math.round(x); 你可能会得到2分。然而,我想知道:由于整数的双精度表示有时看起来像1.999999998或其他什么,是否有可能通过Math.round()创建的双精

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

double x = 1.5;
int y = (int)x;
int y = (int)Math.round(x);
你得到y=1。如果您这样做:

double x = 1.5;
int y = (int)x;
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.99998的数字。因此,int(Math.round())永远不需要截断任何内容,并且始终有效

是否有可能通过
Math.round()
铸造一个double仍然会导致数字被截断

否,
round()
将始终将您的双精度整数舍入到正确的值,然后将其转换为
long
,该值将截断任何小数点。但四舍五入后,将不会有任何分数部分剩余

以下是来自以下方面的文件:

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

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

对于数据类型
Double
int
,可以使用以下命令:

Double double = 5.00;

int integer = double.intValue();

解决了我的问题。

重要的一点是,舍入是在舍入方法中完成的。返回一个长值,可以安全地转换为int(假设返回值始终在int范围内)。是。无法想象一个/长/到整数的问题。明显地应该已经想到了这一点:(虽然确实不会因为舍入而发生截断,但您仍然可能无法获得预期的结果,这仅仅是因为从double(一个非常大的数字)到int(一个小得多的整数)的转换
[max-double:1.7976931348623157E308]
[max-int:2147483647]。请记住。数学。round(double)返回一个长的,而不是double。他正在寻找一个舍入的值。我不认为这会给出您对4.999999999的期望值。我的说法是“double不能被取消引用”。这会截断(楼层),而不会舍入。使用风险自负。