Vielleicht hilft Ihnen die Verwendung von BigDecimal nicht wirklich weiter.
double d = 5521.0000000001;
double f = d - (long) d;
System.out.printf("%.10f%n", f);
druckt
0.0000000001
aber der Wert 5521.0000000001
ist nur eine ungefähre Darstellung.
Die aktuelle Darstellung lautet
double d = 5521.0000000001;
System.out.println(new BigDecimal(d));
BigDecimal db = new BigDecimal(d).subtract(new BigDecimal((long) d));
System.out.println(db);
druckt
5521.000000000100044417195022106170654296875
1.00044417195022106170654296875E-10
Ich vermute, dass das, was Sie versuchen, nicht sinnvoll ist, da Sie anscheinend versuchen, einen Wert zu erhalten, der nicht das ist, was Sie glauben, dass er ist.