Мои проценты усекаются функцией java.text.MessageFormat по умолчанию, как вы отформатируете процент, не теряя точности?
Пример:
String expectedResult = "12.5%";
double fraction = 0.125;
String actualResult = MessageFormat.format("{0,number,percent}", fraction);
assert expectedResult.equals(actualResult) : actualResult +" should be formatted as "+expectedResult;