如何将双倍圆到最接近的第10位

时间:2015-03-13 19:41:19

标签: java double rounding

public double hypotenuse()
{       
    //return Math.hypot(leg, leg); //returns 7.0710678118654755
    //return 0.1 * Math.floor(Math.hypot(leg, leg) * 10); //returns 7.0
    //return 0.1 * Math.ceil(Math.hypot(leg, leg) * 10); //returns 7.1000000000000005
    return 0.1 * Math.round(Math.hypot(leg, leg) * 10); //returns 7.1000000000000005
}

我试图四舍五入到最接近的第10位,所以这个数字应该舍入到7.1。为什么这个方法适用于Math.floor而不适用于Math.round?有没有人有任何见解?

谢谢,

天空

3 个答案:

答案 0 :(得分:0)

没关系,这是我发现的有效。

public double hypotenuse()
{       
    double hypot = Math.hypot(leg, leg);
    String str = String.format("%1.1f", hypot);
    hypot = Double.valueOf(str);
    return hypot;

}

答案 1 :(得分:0)

关于你对自己的回答,你不想将类型A的对象转换为类型B,对它进行操作,然后将其转换回类型A.如果你可以做任何其他事情,则不会。

以下是您希望它做的事情:

public double hypotenuse()
{
    return Math.round(Math.hypot(leg, leg) * 10) / 10.0;
}

我不完全确定原因。需要深入研究一下这在汇编级别编译的内容。

真正的问题是Java中的每个double只有有限数量的位来存储其小数部分。在现实生活中有无数可能的实数。没有办法只用64位表示每个实数。这就是为什么你应该避免银行应用程序和软件中的浮点计算,要求数字准确。将几个双精度相乘可以在计算中引入相当大的误差范围。 See this explanation on another SO answer, which does a great job of explaining this further.

如果您确实需要它,请使用BigDecimal

答案 2 :(得分:-1)

如果这是针对JS:

Math.round()函数返回舍入到最接近整数的数字的值。

相关问题