0

我正在使用一个使用毫米和英寸来绘制缩放图纸的应用程序。我需要在不丢失精度的情况下从一个转换到另一个。我正在为准确性而苦苦挣扎,并转向了 Apfloat 包。有人可以解释一下...如果我从 100 毫米开始,将其转换为英寸,然后再返回到毫米,为什么我会失去精度?

public static void main(String[] args) {

    Apint mm = new Apint(100);
    System.out.println("mm = " + mm);

    // 25.4mm in 1 inch
    Apfloat toInches = new Apfloat("25.4");

    // 100mm / 25.4 = x-Inches      
    Apfloat inches = mm.divide(toInches);
    System.out.println("mm - > Inch = " + inches);

    // x-Inches x 25.4 = 100mm
    Apfloat backToMm = inches.multiply(toInches);
    System.out.println("Inch - > mm = " + backToMm);
}

输出:

mm = 100
mm - > Inch = 3.93
Inch - > mm = 9.99e1


无论我设置多大的精度属性,我仍然会得到重复出现的 9.999 ......

4

2 回答 2

1

好的,我不熟悉 Apfloat,所以我开始阅读它的文档。

显然,如果您使用public Apfloat(String value)构造函数,则数字的精度是字符串中的位数。

在本例中,您指定了“25.4”,即 3 位数。

但是,为了解决这个问题,您可以使用public Apfloat(String value, long precision)允许您指定精度的构造函数,以便您可以处理具有更多小数位的数字。

于 2015-10-15T15:02:57.260 回答
0

舍入模式未定义。要获得四舍五入的结果,请使用ApfloatMath.round()

于 2018-02-04T11:46:29.380 回答