17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 1996-2009, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.format; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.ParseException; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.Utility; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DecimalFormat; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DecimalFormatSymbols; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.NumberFormat; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @test 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * General test of Big NumberFormat 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class BigNumberFormatTest extends TestFmwk { 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static final int ILLEGAL = -1; 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new BigNumberFormatTest().run(args); 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestExponent() { 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US); 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormat fmt1 = new DecimalFormat("0.###E0", US); 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormat fmt2 = new DecimalFormat("0.###E+0", US); 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Number n = new Long(1234); 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmt1, n, "1.234E3"); 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmt2, n, "1.234E+3"); 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmt1, "1.234E3", n); 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmt1, "1.234E+3", n); // Either format should parse "E+3" 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmt2, "1.234E+3", n); 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test the functioning of the secondary grouping value. 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSecondaryGrouping() { 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US); 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormat f = new DecimalFormat("#,##,###", US); 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(f, new Long(123456789), "12,34,56,789"); 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(f, "#,##,###"); 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert f.applyPattern("#,###"); 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert f.setSecondaryGroupingSize(4); 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(f, new Long(123456789), "12,3456,789"); 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(f, "#,####,###"); 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // On Sun JDK 1.2-1.3, the hi_IN locale uses '0' for a zero digit, 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // but on IBM JDK 1.2-1.3, the locale uses U+0966. 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert f = (DecimalFormat) NumberFormat.getInstance(new Locale("hi", "IN")); 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = transmute("1,87,65,43,210", 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert f.getDecimalFormatSymbols().getZeroDigit()); 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(f, new Long(1876543210), str); 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expectPad(DecimalFormat fmt, String pat, int pos) { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, pat, pos, 0, (char)0); 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expectPad(DecimalFormat fmt, String pat, 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int pos, int width, char pad) { 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int apos = 0, awidth = 0; 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char apad = 0; 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.applyPattern(pat); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert apos = fmt.getPadPosition(); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert awidth = fmt.getFormatWidth(); 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert apad = fmt.getPadCharacter(); 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException e) { 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert apos = -1; 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert awidth = width; 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert apad = pad; 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (apos == pos && awidth == width && apad == pad) { 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok \"" + pat + "\" pos=" + apos + 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ((pos == -1) ? "" : " width=" + awidth + " pad=" + apad)); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("FAIL \"" + pat + "\" pos=" + apos + 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " width=" + awidth + " pad=" + apad + 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ", expected " + pos + " " + width + " " + pad); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPatterns() { 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US); 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormat fmt = new DecimalFormat("#", US); 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "*^#", DecimalFormat.PAD_BEFORE_PREFIX, 1, '^'); 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "$*^#", DecimalFormat.PAD_AFTER_PREFIX, 2, '^'); 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "#*^", DecimalFormat.PAD_BEFORE_SUFFIX, 1, '^'); 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "#$*^", DecimalFormat.PAD_AFTER_SUFFIX, 2, '^'); 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "$*^$#", ILLEGAL); 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "#$*^$", ILLEGAL); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat.PAD_BEFORE_SUFFIX, 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12, 'x'); 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "''#0*x", DecimalFormat.PAD_BEFORE_SUFFIX, 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3, 'x'); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPad(fmt, "'I''ll'*a###.##", DecimalFormat.PAD_AFTER_PREFIX, 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10, 'a'); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.applyPattern("AA#,##0.00ZZ"); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setPadCharacter('^'); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setFormatWidth(10); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setPadPosition(DecimalFormat.PAD_BEFORE_PREFIX); 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "*^AA#,##0.00ZZ"); 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setPadPosition(DecimalFormat.PAD_BEFORE_SUFFIX); 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "AA#,##0.00*^ZZ"); 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setPadPosition(DecimalFormat.PAD_AFTER_SUFFIX); 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "AA#,##0.00ZZ*^"); 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 12 3456789012 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String exp = "AA*^#,##0.00ZZ"; 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setFormatWidth(12); 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setPadPosition(DecimalFormat.PAD_AFTER_PREFIX); 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, exp); 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setFormatWidth(13); 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 12 34567890123 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "AA*^##,##0.00ZZ"); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setFormatWidth(14); 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 12 345678901234 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "AA*^###,##0.00ZZ"); 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setFormatWidth(15); 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 12 3456789012345 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setFormatWidth(16); 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 12 34567890123456 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectPat(fmt, "AA*^#,###,##0.00ZZ"); 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expectPat(DecimalFormat fmt, String exp) { 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pat = fmt.toPattern(); 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (pat.equals(exp)) { 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok \"" + pat + '"'); 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \"" + pat + "\", expected \"" + exp + '"'); 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test the handling of the AlphaWorks BigDecimal 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestAlphaBigDecimal() { 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US); 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*For ICU compatibility [Richard/GCL]*/ 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(NumberFormat.getScientificInstance(Locale.US), 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Number[] { new com.ibm.icu.math.BigDecimal("12345.678901"), 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "1.2345678901E4"); 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.####E0", US), 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Number[] { new com.ibm.icu.math.BigDecimal("12345.4999"), 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new com.ibm.icu.math.BigDecimal("12344.5001"), 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12.345E3"); 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.####E0", US), 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Number[] { new com.ibm.icu.math.BigDecimal("12345.5000"), 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new com.ibm.icu.math.BigDecimal("12346.5000"), 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12.346E3"); 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestScientific() { 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US); 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*For ICU compatibility [Richard/GCL]*/ 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(NumberFormat.getScientificInstance(Locale.US), 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Number[] { new Double(12345.678901), 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new java.math.BigDecimal("12345.678901"), 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "1.2345678901E4"); 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.###E0", US), 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(12345), 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12.34E3"); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.###E0", US), 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(12345.00001), 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12.35E3"); 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.####E0", US), 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Number[] { new Integer(12345), 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(12345), 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new java.math.BigDecimal("12345.4999"), 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new java.math.BigDecimal("12344.5001"), 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12.345E3"); 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.####E0", US), 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Number[] { new java.math.BigDecimal("12345.5000"), 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new java.math.BigDecimal("12346.5000"), 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12.346E3"); 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*For ICU compatibility [Richard/GCL]*/ 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(NumberFormat.getScientificInstance(Locale.FRANCE), 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(12345.678901), 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "1,2345678901E4"); 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.####E0", US), 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(789.12345e-9), 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "789.12E-9"); 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.####E0", US), 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(780.e-9), 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "780E-9"); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat(".###E0", US), 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(45678), 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ".457E5"); 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat(".###E0", US), 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(0), 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ".0E0"); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat[] { new DecimalFormat("#E0", US), 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new DecimalFormat("##E0", US), 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new DecimalFormat("####E0", US), 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new DecimalFormat("0E0", US), 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new DecimalFormat("00E0", US), 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new DecimalFormat("000E0", US), 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }, 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(45678000), 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new String[] { "4.5678E7", 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "45.678E6", 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "4567.8E4", 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "5E7", 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "46E6", 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "457E5", 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("###E0", US), 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Object[] { new Double(0.0000123), "12.3E-6", 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(0.000123), "123E-6", 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new java.math.BigDecimal("0.00123"), "1.23E-3", // Cafe VM messes up Double(0.00123) 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(0.0123), "12.3E-3", 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(0.123), "123E-3", 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(1.23), "1.23E0", 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(12.3), "12.3E0", 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(123), "123E0", 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(1230), "1.23E3", 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }); 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("0.#E+00", US), 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Object[] { new Double(0.00012), "1.2E-04", 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(12000), "1.2E+04", 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }); 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPad() { 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US); 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("*^##.##", US), 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Object[] { new Long(0), "^^^^0", 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(-1.3), "^-1.3", 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US), 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Object[] { new Long(0), "0.0E0______ g-m/s^2", 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(1.0/3), "333.333E-3_ g-m/s^2", 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US), 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Object[] { new Long(0), "0.0______ g-m/s^2", 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Double(1.0/3), "0.33333__ g-m/s^2", 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(new DecimalFormat("*x#,###,###,##0.00;*x(#,###,###,##0.00)", US), 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Object[] { 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(-100), "xxxxxxxx(100.00)", 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(-1000), "xxxxxx(1,000.00)", 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(-1000000), "xx(1,000,000.00)", 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new Long(-1000000000), "(1,000,000,000.00)", 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }); 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expect(NumberFormat fmt, Object[] data) { 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i=0; i<data.length; i+=2) { 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmt, (Number) data[i], (String) data[i+1]); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expect(Object fmto, Object numo, Object expo) { 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NumberFormat fmt = null, fmts[] = null; 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Number num = null, nums[] = null; 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String exp = null, exps[] = null; 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (fmto instanceof NumberFormat[]) { 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmts = (NumberFormat[]) fmto; 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt = (NumberFormat) fmto; 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (numo instanceof Number[]) { 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert nums = (Number[]) numo; 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert num = (Number) numo; 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (expo instanceof String[]) { 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exps = (String[]) expo; 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exp = (String) expo; 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int n = 1; 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (fmts != null) { 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert n = Math.max(n, fmts.length); 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (nums != null) { 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert n = Math.max(n, nums.length); 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (exps != null) { 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert n = Math.max(n, exps.length); 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i=0; i<n; ++i) { 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect(fmts == null ? fmt : fmts[i], 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert nums == null ? num : nums[i], 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exps == null ? exp : exps[i]); 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static String showNumber(Number n) { 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String cls = n.getClass().getName(); 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!(n instanceof com.ibm.icu.math.BigDecimal 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || n instanceof java.math.BigDecimal)) { 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int i = cls.lastIndexOf('.'); 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cls = cls.substring(i+1); 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return n.toString() + " (" + cls + ')'; 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expect(NumberFormat fmt, Number n, String exp) { 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String saw = fmt.format(n); 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pat = ((DecimalFormat) fmt).toPattern(); 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (saw.equals(exp)) { 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok " + showNumber(n) + " x " + 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pat + " = " + 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Utility.escape(saw)); 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL " + showNumber(n) + " x " + 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pat + " = \"" + 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Utility.escape(saw) + ", expected " + Utility.escape(exp)); 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void expect(NumberFormat fmt, String str, Number exp) { 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Number saw = null; 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert saw = fmt.parse(str); 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (ParseException e) { 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert saw = null; 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pat = ((DecimalFormat) fmt).toPattern(); 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (saw.equals(exp)) { 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok \"" + str + "\" x " + 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pat + " = " + 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showNumber(saw)); 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \"" + str + "\" x " + 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pat + " = " + 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showNumber(saw) + ", expected " + showNumber(exp)); 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Given a string composed of [0-9] and other chars, convert the 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * [0-9] chars to be offsets 0..9 from 'zero'. 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static String transmute(String str, char zero) { 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer buf = new StringBuffer(); 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i=0; i<str.length(); ++i) { 3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char c = str.charAt(i); 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (c >= '0' && c <= '9') { 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c = (char) (c - '0' + zero); 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(c); 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return buf.toString(); 3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void Test4161100() { 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NumberFormat f = NumberFormat.getInstance(); 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert f.setMinimumFractionDigits(1); 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert f.setMaximumFractionDigits(1); 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double a = -0.09; 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s = f.format(a); 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(a + " x " + 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ((DecimalFormat) f).toPattern() + " = " + 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert s); 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!s.equals("-0.1")) { 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL"); 3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBigDecimalJ28() { 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] DATA = { 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "1", "1E0", 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "-1", "-1E0", 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "0", "0E0", 4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "12e34", "1.2E35", 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "-12.3e-45", "-1.23E-44", 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "0.73e-7", "7.3E-8", 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NumberFormat fmt = NumberFormat.getScientificInstance(Locale.US); 4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Pattern: " + ((DecimalFormat)fmt).toPattern()); 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i=0; i<DATA.length; i+=2) { 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String input = DATA[i]; 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String exp = DATA[i+1]; 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.math.BigDecimal bd = new com.ibm.icu.math.BigDecimal(input); 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String output = fmt.format(bd); 4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (output.equals(exp)) { 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("input=" + input + " num=" + bd + " output=" + output); 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: input=" + input + " num=" + bd + " output=" + output + 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected=" + exp); 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBigDecimalRounding() { 4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // jb 3657 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert java.text.DecimalFormat jdkFormat=new java.text.DecimalFormat("###,###,###,##0"); 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.text.DecimalFormat icuFormat=new com.ibm.icu.text.DecimalFormat("###,###,###,##0"); 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] values = { 4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "-1.74", "-1.24", "-0.74", "-0.24", "0.24", "0.74", "1.24", "1.74" 4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < values.length; ++i) { 4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String val = values[i]; 4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert java.math.BigDecimal bd = new java.math.BigDecimal(val); 4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String jdk = jdkFormat.format(bd); 4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String icu = icuFormat.format(bd); 4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Format of BigDecimal " + val + " by JDK is " + jdk); 4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Format of BigDecimal " + val + " by ICU is " + icu); 4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!jdk.equals(icu)) { 4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("BigDecimal jdk: " + jdk + " != icu: " + icu); 4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double d = bd.doubleValue(); 4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jdk = jdkFormat.format(d); 4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert icu = icuFormat.format(d); 4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Format of double " + val + " by JDK is " + jdk); 4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Format of double " + val + " by ICU is " + icu); 4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!jdk.equals(icu)) { 4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("double jdk: " + jdk + " != icu: " + icu); 4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 451