为什么javamath.round总是向下取整?

为什么javamath.round总是向下取整?,java,math,rounding,Java,Math,Rounding,我有许多字段,这些字段接受输入,一个过程发生,然后是显示输出的字段。我的问题是,出于某种原因,math.round似乎总是向下舍入,而不是最接近的整数 这里有一个例子 private void method(){ int X= Integer.parseInt(XjTF.getText()); int Y= Integer.parseInt(YjTF.getText()); float Z =(X+Y)/6; int output = Math.round

我有许多字段,这些字段接受输入,一个过程发生,然后是显示输出的字段。我的问题是,出于某种原因,math.round似乎总是向下舍入,而不是最接近的整数

这里有一个例子

private void method(){
    int X= Integer.parseInt(XjTF.getText());
    int Y= Integer.parseInt(YjTF.getText());

    float Z =(X+Y)/6;

    int output  =  Math.round(Z);

    OutputjTF.setText(Integer.toString(output)+" =answer rounded to closest integer");
}

您的
X
Y
变量是
int
,因此Java执行整数除法,这里是除以6。这就是降低小数点的原因。然后将其转换为
浮点
,然后再分配给
Z
。当它到达
Math.round
时,小数点已经消失了

尝试将
X
强制转换为
float
以强制浮点除法:

float Z =((float) X + Y)/6;
float Z = (X + Y)/6.0f;
这将保留
Math.round
用于对其输入进行正确舍入的十进制信息

另一种方法是为
6
指定
float
文字,这将强制将
X
Y
之和转换为除法之前的
float

float Z =((float) X + Y)/6;
float Z = (X + Y)/6.0f;
它不能仅仅是
6.0
,因为这是
double
文本,Java编译器在尝试将
double
分配给
float
时会抱怨“可能会丢失精度”

以下是该网站的相关引用:

整数除法向0舍入。也就是说,为 二进制数字提升后的整数操作数n和d (§5.6.2)是一个整数值q,其大小尽可能大 同时满足| d·q |≤ |n |


这非常有效,谢谢你的回答