了解Apfloat及其精度

时间:2015-10-15 14:53:00

标签: java apfloat

我正在使用一个使用mm和英寸来绘制缩放图形的应用程序。我需要在不失精度的情况下从一个转换为另一个。我正在努力准确,并转向Apfloat包。有人可以解释一下......如果我从100mm开始,将其转换为英寸然后又回到Mm,为什么我会失去精度?

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 ...

2 个答案:

答案 0 :(得分:0)

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

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

在这种情况下,您已指定" 25.4",这是3位数。

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

答案 1 :(得分:0)

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