From: Shane Carr Date: Wed, 29 Mar 2017 07:37:12 +0000 (+0000) Subject: ICU-13060 One more tweak to CurrencyUsage override for backwards compatibility. X-Git-Tag: release-59-rc~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6616bebf9f34e09430854818b19708233554d373;p=icu ICU-13060 One more tweak to CurrencyUsage override for backwards compatibility. X-SVN-Rev: 39955 --- diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/Rounder.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/Rounder.java index fb28a5f7ec5..5381ad50b7b 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/Rounder.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/Rounder.java @@ -167,13 +167,13 @@ public abstract class Rounder extends Format.BeforeFormat { // For backwards compatibility, minimum overrides maximum if the two conflict. // The following logic ensures that there is always a minimum of at least one digit. if (_minInt == 0 && _maxFrac != 0) { - // Force a digit to the right of the decimal point. + // Force a digit after the decimal point. minFrac = _minFrac <= 0 ? 1 : _minFrac; maxFrac = _maxFrac < 0 ? Integer.MAX_VALUE : _maxFrac < minFrac ? minFrac : _maxFrac; minInt = 0; maxInt = _maxInt < 0 ? Integer.MAX_VALUE : _maxInt; } else { - // Force a digit to the left of the decimal point. + // Force a digit before the decimal point. minFrac = _minFrac < 0 ? 0 : _minFrac; maxFrac = _maxFrac < 0 ? Integer.MAX_VALUE : _maxFrac < minFrac ? minFrac : _maxFrac; minInt = _minInt <= 0 ? 1 : _minInt; diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/formatters/CurrencyFormat.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/formatters/CurrencyFormat.java index 8d499678496..4930a083733 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/formatters/CurrencyFormat.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/formatters/CurrencyFormat.java @@ -258,8 +258,16 @@ public class CurrencyFormat { if (_currencyUsage == null && (_minFrac >= 0 || _maxFrac >= 0)) { // User override of fraction length - destination.setMinimumFractionDigits(_minFrac); - destination.setMaximumFractionDigits(_maxFrac); + if (_minFrac < 0) { + destination.setMinimumFractionDigits(fractionDigits < _maxFrac ? fractionDigits : _maxFrac); + destination.setMaximumFractionDigits(_maxFrac); + } else if (_maxFrac < 0) { + destination.setMinimumFractionDigits(_minFrac); + destination.setMaximumFractionDigits(fractionDigits > _minFrac ? fractionDigits : _minFrac); + } else { + destination.setMinimumFractionDigits(_minFrac); + destination.setMaximumFractionDigits(_maxFrac); + } } else { // Currency rounding destination.setMinimumFractionDigits(fractionDigits); diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java index ec4168a90b6..a680b89fd33 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java @@ -5202,6 +5202,20 @@ public class NumberFormatTest extends TestFmwk { expect2(df, 1234, "1,234"); } + @Test + public void testCurrencyUsageFractionOverrides() { + NumberFormat df = DecimalFormat.getCurrencyInstance(ULocale.US); + expect2(df, 35.0, "$35.00"); + df.setMinimumFractionDigits(3); + expect2(df, 35.0, "$35.000"); + df.setMaximumFractionDigits(3); + expect2(df, 35.0, "$35.000"); + df.setMinimumFractionDigits(-1); + expect2(df, 35.0, "$35.00"); + df.setMaximumFractionDigits(1); + expect2(df, 35.0, "$35.0"); + } + @Test public void testSignificantDigitsMode() { String[][] allExpected = {