我正在使用一个使用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 ...
答案 0 :(得分:0)
好的,我不熟悉Apfloat,所以我开始阅读它的文档。
显然,如果使用public Apfloat(String value)
构造函数,则数字的精度是字符串中的位数。
在这种情况下,您已指定" 25.4",这是3位数。
但是,要解决此问题,您可以使用public Apfloat(String value, long precision)
构造函数,它允许您指定精度,以便您可以处理具有更多小数位的数字。
答案 1 :(得分:0)
舍入模式未定义。要获得舍入结果,请使用ApfloatMath.round()