为什么javamath.round总是向下取整?
我有许多字段,这些字段接受输入,一个过程发生,然后是显示输出的字段。我的问题是,出于某种原因,math.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
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 |
这非常有效,谢谢你的回答