Java 如何将双人间四舍五入到最近的第十位

Java 如何将双人间四舍五入到最近的第十位,java,double,rounding,Java,Double,Rounding,我正试图四舍五入到最近的第10位,所以这个数字应该四舍五入到7.1。为什么此方法适用于Math.floor而不适用于Math.round?有人有什么见解吗 谢谢 天空如果这是针对JS的: 函数的作用是:返回一个四舍五入到最接近的整数的数值。不管怎样,我发现这是可行的 public double hypotenuse() { //return Math.hypot(leg, leg); //returns 7.0710678118654755 //return 0.1

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

谢谢

天空

如果这是针对JS的:


函数的作用是:返回一个四舍五入到最接近的整数的数值。

不管怎样,我发现这是可行的

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
}

关于你自己的答案,你不想把一个类型为A的对象转换为类型B,对它进行操作,然后再把它转换回类型A。如果你能做任何其他的事情,你就不会这样做

以下是您希望它执行的操作:

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

}
我不完全清楚为什么。这需要在汇编级别深入了解编译的内容

真正的问题是Java中的每个double只有有限的位数来存储其十进制部分。在现实生活中有无限多的可能实数。不可能用64位来表示每个实数。这就是为什么你应该避免在银行应用程序和软件中进行浮点计算,因为这些应用程序和软件要求数字精确。将几个倍数相乘可以在计算中引入相当大的误差


如果您真的需要精确,请使用
BigDecimal

这是什么语言?不同的语言,但可能在以下方面:。在我看来,您刚刚遇到了双精度舍入问题。这是一项作业。它被指定使用一个双精度整数,精确到第十位。不过我会记住BigDecimal。但是它会在最近的第10位取整吗?对于Java,对不起。数学也是如此,这是可行的。不过没关系,我发现了一些不同的方法可以工作。我知道有一种方法可以用一行代码完成!我发誓我试过了,但没用,但现在起作用了。谢谢!:-)我已经在几个节目中遇到了这个取整问题,这给我带来了很大的压力!非常感谢你的帮助!不客气。但是,如果您关心完美的精度,那么您应该真正使用
BigDecimal
@Skylin,请问您为什么如此关心数字的精确性?
public double hypotenuse()
{
    return Math.round(Math.hypot(leg, leg) * 10) / 10.0;
}