当前位置: 首页 > 知识库问答 >
问题:

为什么java Math.Round总是向下四舍五入?[副本]

苏君昊
2023-03-14

这里有一个例子

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");
}

共有1个答案

刘子实
2023-03-14

您的xy变量是int,因此Java执行整数除法,这里是用6除法。这就是小数点的下降。然后在分配给z之前将其转换为float。当它到达math.round时,小数点已经消失了。

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

float Z =((float) X + Y)/6;

这将保留Math.round将用于正确舍入其输入的十进制信息。

float Z = (X + Y)/6.0f;

它不能仅仅是6.0,因为这是一个double文本,并且Java编译器在试图将double分配给float时会抱怨“可能丢失精度”。

以下是JLS第15.17.2节的相关引用:

整数除法向0四舍五入。即,对作为整数的操作数n和d进行二进制数值提升(§5.6.2)后产生的商是一个整数值q,其大小在满足d·q≤n的情况下尽可能大。

 类似资料:
  • 问题内容: 我怎么总是将a舍入为一个,而不舍入它。我知道,但是我希望它总是四舍五入。因此,如果为,则四舍五入为4。 问题答案: 您可以使用方法。 请参阅JavaDoc链接:https ://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double ) 从文档: 细胞 返回大于或等于自变量且等于数学整数的最小(最接近负无穷大

  • 如果一个数字有精确的二进制表示,比如(十进制)0.5,难道不应该正确地四舍五入吗? 编辑:该问题发生在3.4.3版本中,但不发生在2.7.6版本中

  • 有人能告诉我怎么打双人球吗 e、 g.从双倍值55.6666666666667开始-四舍五入到双倍值56.0000000000- 或者从55.333333333333开始-四舍五入到55.0000000000的两倍- 谢谢。

  • 本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。 ROUND()函数的行为取决于其参量是准确的还是近似的: ·对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负

  • 本文向大家介绍javascript进行四舍五入方法汇总,包括了javascript进行四舍五入方法汇总的使用技巧和注意事项,需要的朋友参考一下 原生 javascript 中四舍五入的函数 toFixed(n) , n为要保留的小数位数。 (0<= n <=20) http://jsfiddle.net/14x0vhu6/ 输出值不是预想的1.0999,而是  1.0999000000000000

  • 问题内容: 所以,我试图找出如何在实践中使用DFT来检测流行的信号中的频率。我一直在想什么 傅立叶变换和DFT算法是如何工作的,但显然我仍然有路要走。我已经写了一些代码来生成一个信号(自从意图是配合音乐工作,我产生了一个主要的C和弦,因此怪异频率值),然后尝试返回到频率数字。在这里是我的密码吗 这给了我这和我编码的频率(261.63、329.63和392.0)。我做错什么了我该怎么修? 问题答案: