Поскольку это java, и вы используете регулярное выражение для проверки шаблона
^\d{0,8}(\.\d{1,2})?$
получит число с двумя необязательными десятичными знаками.
Получив это число, вы можете разобрать его в двойное число и проверить, что оно не равно 0.
String test = "100.00";
if (Pattern.compile("^\\d{0,8}(\\.\\d{1,2})?$").matcher(test).matches()) {
double val = Double.parseDouble(test);
if (val > 0) {
// do something
}
}
Другой вариант - просто забыть регулярное выражение, разобрать его и проверить, находится ли оно в пределах пределы вам нужны
final double maxVal = 99999999.99;
String test = "100.00";
try {
double val = Double.parseDouble(test);
if (val > 0 && val <= maxVal) {
int decimalIndex = test.indexOf(".");
if (decimalIndex >= 0) {
if (test.length() - decimalIndex - 1 <= 2) {
// do something, at most two deximals
}
} else {
// do something, no decinals
}
}
} catch (NumberFormatException e) {
// todo handle exception
}