Add the ability to override the number of fractional digits of a
NumberFormat instance.

Review by: shanjian@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10754 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/i18n/client/NumberFormat.java b/user/src/com/google/gwt/i18n/client/NumberFormat.java
index 5424ed3..fafed9b 100644
--- a/user/src/com/google/gwt/i18n/client/NumberFormat.java
+++ b/user/src/com/google/gwt/i18n/client/NumberFormat.java
@@ -975,6 +975,37 @@
   }
 
   /**
+   * Change the number of fractional digits used for formatting with this
+   * instance.
+   * 
+   * @param digits the exact number of fractional digits for formatted
+   *     values; must be >= 0
+   * @return {@code this}, for chaining purposes
+   */
+  public NumberFormat overrideFractionDigits(int digits) {
+    return overrideFractionDigits(digits, digits);
+  }
+
+  /**
+   * Change the number of fractional digits used for formatting with this
+   * instance. Digits after {@code minDigits} that are zero will be omitted from
+   * the formatted value.
+   * 
+   * @param minDigits the minimum number of fractional digits for formatted
+   *     values; must be >= 0
+   * @param maxDigits the maximum number of fractional digits for formatted
+   *     values; must be >= {@code minDigits}
+   * @return {@code this}, for chaining purposes
+   */
+  public NumberFormat overrideFractionDigits(int minDigits, int maxDigits) {
+    assert minDigits >= 0;
+    assert maxDigits >= minDigits;
+    minimumFractionDigits = minDigits;
+    maximumFractionDigits = maxDigits;
+    return this;
+  }
+
+  /**
    * Parses text to produce a numeric value. A {@link NumberFormatException} is
    * thrown if either the text is empty or if the parse does not consume all
    * characters of the text.
diff --git a/user/test/com/google/gwt/i18n/client/NumberFormat_en_Test.java b/user/test/com/google/gwt/i18n/client/NumberFormat_en_Test.java
index f69c5cd..f5e7c54 100644
--- a/user/test/com/google/gwt/i18n/client/NumberFormat_en_Test.java
+++ b/user/test/com/google/gwt/i18n/client/NumberFormat_en_Test.java
@@ -152,6 +152,16 @@
     assertEquals("¥1,235 JPY", str);
     str = NumberFormat.getGlobalCurrencyFormat("CNY").format(1234.75);
     assertEquals("¥1,234.75 CNY", str);
+
+    // Test overriding the number of fractional digits
+    formatter = NumberFormat.getCurrencyFormat("USD").overrideFractionDigits(0);
+    str = formatter.format(1234.556);
+    assertEquals("$1,235", str);
+    formatter = NumberFormat.getCurrencyFormat("USD").overrideFractionDigits(3, 4);
+    str = formatter.format(1234.556);
+    assertEquals("$1,234.556", str);
+    str = formatter.format(1234.55637);
+    assertEquals("$1,234.5564", str);
   }
 
   public void testExponential() {