Использование regex и теперь у Вас есть две проблемы. я разделил бы вещь на точках (". "), затем удостоверьтесь, что каждая часть является или подстановочным знаком или набором цифр (regex, прекрасно теперь). Если вещь допустима, Вы просто возвращаете корректный блок разделения.
Класс DecimalFormat предназначен для преобразования десятичного числового значения в строку. В вашем примере вы берете строку, полученную из метода format (), и помещаете ее обратно в переменную типа double. Если вы затем выводите эту двойную переменную, вы не увидите отформатированную строку. См. Пример кода ниже и его выходные данные:
int count = 10;
int total = 20;
DecimalFormat dec = new DecimalFormat("#.00");
double rawPercent = ( (double)(count) / (double)(total) ) * 100.00;
double percentage = Double.valueOf(dec.format(rawPercent));
System.out.println("DF Version: " + dec.format(rawPercent));
System.out.println("double version: " + percentage);
Какие выходы:
"DF Version: 50.00"
"double version: 50.0"
Вы можете попробовать что-нибудь вроде:
DecimalFormat df = new DecimalFormat("0.000000");
df.setMinimumFractionDigits(0);
df.setMinimumIntegerDigits(2);
Таким образом вы можете гарантировать минимальное количество цифр до или после десятичной дроби
Попробуйте вместо этого использовать DecimalFormat со значением «0.00». Согласно JavaDocs , это не удалит лишние нули.