use*_*998 4 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(Z);
OutputjTF.setText(Integer.toString(output)+" =answer rounded to closest integer");
}
Run Code Online (Sandbox Code Playgroud)
rge*_*man 13
你X和Y变量是int,所以Java执行整数除法,这里除以6.这就是丢弃小数点. 然后它被转换为a float被分配给之前Z.到达时Math.round,小数点已经消失.
尝试强制X转换float为强制浮点除法:
float Z =((float) X + Y)/6;
Run Code Online (Sandbox Code Playgroud)
这将保留Math.round用于正确舍入其输入的十进制信息.
另一种方法是指定一个float文字6,这将强制在除法之前投射和的X和:Yfloat
float Z = (X + Y)/6.0f;
Run Code Online (Sandbox Code Playgroud)
它不能仅仅是6.0,因为这是一个double文字,并试图分配时,Java编译器会抱怨"可能的精度损失" double的float.
以下是JLS第15.17.2节的相关引用:
整数除法向0舍入.也就是说,在二进制数字提升(第5.6.2节)之后为操作数n和d生成的商是整数值q,其大小尽可能大,同时满足| d·q |.≤| n |.
| 归档时间: |
|
| 查看次数: |
9514 次 |
| 最近记录: |