From a3e12a9fe7918e20929fa14b2d5d096825a4f32b Mon Sep 17 00:00:00 2001 From: Travis Keep Date: Thu, 10 Oct 2013 22:34:05 +0000 Subject: [PATCH] ICU-10419 Fix rounding in DecimalFormat in JAVA X-SVN-Rev: 34553 --- .../src/com/ibm/icu/text/DecimalFormat.java | 2 ++ .../icu/dev/test/format/NumberFormatTest.java | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/DecimalFormat.java b/icu4j/main/classes/core/src/com/ibm/icu/text/DecimalFormat.java index 0f063106549..8cf46a3575b 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/DecimalFormat.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/DecimalFormat.java @@ -5978,6 +5978,8 @@ public class DecimalFormat extends NumberFormat { } else { if (getMaximumFractionDigits() > 0) { actualRoundingIncrementICU = BigDecimal.ONE.movePointLeft(getMaximumFractionDigits()); + } else { + actualRoundingIncrementICU = BigDecimal.ONE; } } } 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 54def2fd1f0..97691bca179 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 @@ -18,7 +18,9 @@ import java.text.FieldPosition; import java.text.ParseException; import java.text.ParsePosition; import java.util.ArrayList; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; import java.util.Set; import com.ibm.icu.dev.test.TestUtil; @@ -42,6 +44,24 @@ public class NumberFormatTest extends com.ibm.icu.dev.test.TestFmwk { public static void main(String[] args) throws Exception { new NumberFormatTest().run(args); } + + public void Test10419RoundingWith0FractionDigits() { + Object[][] data = new Object[][]{ + {BigDecimal.ROUND_CEILING, 1.488, "2"}, + {BigDecimal.ROUND_DOWN, 1.588, "1"}, + {BigDecimal.ROUND_FLOOR, 1.588, "1"}, + {BigDecimal.ROUND_HALF_DOWN, 1.5, "1"}, + {BigDecimal.ROUND_HALF_EVEN, 2.5, "2"}, + {BigDecimal.ROUND_HALF_UP, 2.5, "3"}, + {BigDecimal.ROUND_UP, 1.5, "2"}, + }; + NumberFormat nff = NumberFormat.getNumberInstance(ULocale.ENGLISH); + nff.setMaximumFractionDigits(0); + for (Object[] item : data) { + nff.setRoundingMode(((Integer) item[0]).intValue()); + assertEquals("Test10419", item[2], nff.format(item[1])); + } + } public void TestParseNegativeWithFaLocale() { DecimalFormat parser = (DecimalFormat) NumberFormat.getInstance(new ULocale("fa")); -- 2.40.0