package com.spun.util.parser; /** * **/ import java.text.NumberFormat; import com.spun.util.NumberUtils; public class TemplateDouble { protected double amount = 0; private static NumberFormat decimalFormat = null; protected String defaultPrefix = null; protected String defaultPostfix = null; protected int defaultMinimumPrecision = 2; protected int defaultMaximumPrecision = 2; /************************************************************************/ static { decimalFormat = NumberFormat.getNumberInstance(); decimalFormat.setMaximumFractionDigits(2); decimalFormat.setMinimumFractionDigits(2); } /************************************************************************/ public TemplateDouble(double amount) { this.amount = amount; } /************************************************************************/ public TemplateDouble(double amount, String defaultPrefix, String defaultPostfix, int defaultMinimumPrecision, int defaultMaximumPrecision) { this.amount = amount; this.defaultPostfix = defaultPostfix; this.defaultPrefix = defaultPrefix; this.defaultMinimumPrecision = defaultMinimumPrecision; this.defaultMaximumPrecision = defaultMaximumPrecision; } /***********************************************************************/ public TemplateDouble(Number amount) { this(amount.doubleValue()); } /***********************************************************************/ public String inDollarFormat() { return inFormat(amount, "$", 2, 2, "", true); } /***********************************************************************/ public CurrencyAmount asCurrency() { return new CurrencyAmount(amount); } /***********************************************************************/ public String asInteger() { return inFormat(amount, null, 0, 0, null, true); } /***********************************************************************/ public String inFormat(String prefix, int precision, int minimumPrecision, String postfix, boolean useGrouping) { return inFormat(amount, prefix, precision, minimumPrecision, postfix, useGrouping); } /***********************************************************************/ public static String inFormat(double amount, String prefix, int maximumPrecision, int minimumPrecision, String postfix, boolean useGrouping) { String value = ""; NumberFormat dFormat = decimalFormat; if ((maximumPrecision != 2) || (minimumPrecision != 2) || !useGrouping) { dFormat = NumberFormat.getNumberInstance(); dFormat.setMaximumFractionDigits(maximumPrecision); dFormat.setMinimumFractionDigits(minimumPrecision); dFormat.setGroupingUsed(useGrouping); } value += dFormat.format(amount); if (prefix != null) { if (value.charAt(0) != '-') { value = prefix + value; } else { value = '-' + prefix + value.substring(1); } } value += (postfix != null) ? postfix : ""; return value; } /***********************************************************************/ protected int getDefaultMinimumPrecision(int maximumPrecision) { return maximumPrecision < defaultMinimumPrecision ? maximumPrecision : defaultMinimumPrecision; } /***********************************************************************/ public String asInt() { return inFormat(null, 0, 0, null, false); } /************************************************************************/ public String asDouble() { return inFormat(null, 2, 2, null, false); } /************************************************************************/ public String asNegative() { return inFormat(-amount, defaultPrefix, 2, 2, defaultPostfix, false); } /************************************************************************/ public TemplateDouble getAbsoluteValue() { return new TemplateDouble(-amount, defaultPrefix, defaultPostfix, defaultMinimumPrecision, defaultMaximumPrecision); } /************************************************************************/ public boolean isZero() { return NumberUtils.equals(0, this.amount, 0.0005); } public TemplateDouble divide(int by) { return new TemplateDouble(amount / by); } /************************************************************************/ public String toString() { return inFormat(defaultPrefix, defaultMaximumPrecision, getDefaultMinimumPrecision(defaultMaximumPrecision), defaultPostfix, true); } /************************************************************************/ /************************************************************************/ public double getAmount() { return amount; } }