Я использую приложение, которое использует мм и дюймы для рисования масштабированных рисунков. Мне нужно конвертировать из одного в другое без потери точности. Я борюсь с точностью и обратился к пакету Apfloat. Может кто-то объяснить ... если я начну с 100 мм, конвертируем его в дюймы, а затем снова вернемся к Mm, почему я получаю потерю точности ???Понимание Apfloat и его точность
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 ...
Звучит как ошибка округления с плавающей запятой. – Powerlord
@Powerlord Я согласен, но мне повезло, что этот конкретный пакет должен был быть точным и был предпочтительнее BigDecimal. – cworner1