package gdsc.format; import java.text.DecimalFormat; import java.text.FieldPosition; import java.text.ParsePosition; /** * Provide an extension to the {@link DecimalFormat} with a minimum and maximum * limit. If the parsed source is outside the bounds it will be set the corresponding limit. */ public class LimitedNumberFormat extends DecimalFormat { /** * Auto-generated */ private static final long serialVersionUID = -2564688480913124241L; private double min = Double.MIN_VALUE; private double max = Double.MAX_VALUE; public LimitedNumberFormat(double min, double max) { super(); this.min = min; this.max = max; } public LimitedNumberFormat(double min) { super(); this.min = min; } @Override public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { StringBuffer sb = super.format(number, toAppendTo, pos); return sb; } @Override public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) { StringBuffer sb = super.format(number, toAppendTo, pos); return sb; } @Override public Number parse(String source, ParsePosition parsePosition) { // int currentIndex = parsePosition.getIndex(); Number n = super.parse(source, parsePosition); if (n != null) { // if (n.doubleValue() < min || n.doubleValue() > max) // { // parsePosition.setErrorIndex(currentIndex); // parsePosition.setIndex(currentIndex); // n = null; // } if (n.doubleValue() < min) { n = Double.valueOf(min); } else if (n.doubleValue() > max) { n = Double.valueOf(max); } } return n; } }