Parser: Prepend `0` to all strings starting with `.`, even just `.` [#838]

master
gnosygnu 3 years ago
parent 8684783139
commit 659bca3660

@ -1,6 +1,6 @@
/* /*
XOWA: the XOWA Offline Wiki Application XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2020 gnosygnu@gmail.com Copyright (C) 2012-2021 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3, XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0. or alternatively under the terms of the Apache License Version 2.0.
@ -75,6 +75,10 @@ public class Decimal_adp_ {
if (raw.contains("e")) { if (raw.contains("e")) {
raw = raw.replace("e", "E"); raw = raw.replace("e", "E");
} }
// 2021-02-13|ISSUE#:838|Parse '.' as '0.'; PAGE:en.w:2019_FIVB_Volleyball_Women%27s_Challenger_Cup#Pool_A
if (raw.startsWith(".")) {
raw = "0" + raw;
}
BigDecimal bd = (BigDecimal)nf.parse(raw); BigDecimal bd = (BigDecimal)nf.parse(raw);
return new Decimal_adp(bd); return new Decimal_adp(bd);
} catch (ParseException e) { } catch (ParseException e) {
@ -84,4 +88,4 @@ public class Decimal_adp_ {
public static Decimal_adp pow_10_(int v) {return new Decimal_adp(new BigDecimal(1).scaleByPowerOfTen(v));} public static Decimal_adp pow_10_(int v) {return new Decimal_adp(new BigDecimal(1).scaleByPowerOfTen(v));}
public static final MathContext RoundDownContext = new MathContext(0, RoundingMode.DOWN); public static final MathContext RoundDownContext = new MathContext(0, RoundingMode.DOWN);
public static final MathContext Gplx_rounding_context = new MathContext(14, RoundingMode.HALF_UP); // changed from 28 to 14; DATE:2015-07-31 public static final MathContext Gplx_rounding_context = new MathContext(14, RoundingMode.HALF_UP); // changed from 28 to 14; DATE:2015-07-31
} }

@ -1,6 +1,6 @@
/* /*
XOWA: the XOWA Offline Wiki Application XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2020 gnosygnu@gmail.com Copyright (C) 2012-2021 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3, XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0. or alternatively under the terms of the Apache License Version 2.0.
@ -18,52 +18,55 @@ package gplx;
import org.junit.*; import org.junit.*;
public class Decimal_adp__tst { public class Decimal_adp__tst {
private final Decimal_adp__fxt fxt = new Decimal_adp__fxt(); private final Decimal_adp__fxt fxt = new Decimal_adp__fxt();
@Test public void divide_() { @Test public void divide_() {
fxt.Test_divide(1, 1000, "0.001"); fxt.Test_divide(1, 1000, "0.001");
fxt.Test_divide(1, 3, "0.33333333333333"); fxt.Test_divide(1, 3, "0.33333333333333");
fxt.Test_divide(1, 7, "0.14285714285714"); fxt.Test_divide(1, 7, "0.14285714285714");
} }
@Test public void base1000_() { @Test public void base1000_() {
fxt.Test_base_1000(1000, "1"); fxt.Test_base_1000(1000, "1");
fxt.Test_base_1000(1234, "1.234"); fxt.Test_base_1000(1234, "1.234");
fxt.Test_base_1000(123, "0.123"); fxt.Test_base_1000(123, "0.123");
} }
@Test public void parts_() { @Test public void parts_() {
fxt.Test_parts(1, 0, "1"); fxt.Test_parts(1, 0, "1");
fxt.Test_parts(1, 2, "1.2"); fxt.Test_parts(1, 2, "1.2");
fxt.Test_parts(1, 23, "1.23"); fxt.Test_parts(1, 23, "1.23");
fxt.Test_parts(123, 4567, "123.4567"); fxt.Test_parts(123, 4567, "123.4567");
} }
@Test public void parse() { @Test public void parse() {
fxt.Test_parse("1", "1"); fxt.Test_parse("1", "1");
fxt.Test_parse("1.2", "1.2"); fxt.Test_parse("1.2", "1.2");
fxt.Test_parse("0.1", "0.1"); fxt.Test_parse("0.1", "0.1");
fxt.Test_parse("1.2E1", "12"); fxt.Test_parse("1.2E1", "12");
fxt.Test_parse("1.2e1", "12"); // 2020-08-27|ISSUE#:565|Parse 'e' as 'E'; PAGE:en.w:Huntington_Plaza fxt.Test_parse("1.2e1", "12"); // 2020-08-27|ISSUE#:565|Parse 'e' as 'E'; PAGE:en.w:Huntington_Plaza
} }
@Test public void Truncate_decimal() { @Test public void parse_dot() {
fxt.Test_parse(".", "0"); // 2021-02-13|ISSUE#:838|Parse '.' as '0.'; PAGE:en.w:2019_FIVB_Volleyball_Women%27s_Challenger_Cup#Pool_A
}
@Test public void Truncate_decimal() {
fxt.Test_truncate_decimal("1", "1"); fxt.Test_truncate_decimal("1", "1");
fxt.Test_truncate_decimal("1.1", "1"); fxt.Test_truncate_decimal("1.1", "1");
fxt.Test_truncate_decimal("1.9", "1"); fxt.Test_truncate_decimal("1.9", "1");
} }
@Test public void Fraction1000() { @Test public void Fraction1000() {
fxt.Test_frac_1000(1, 1000, 1); // 0.001 fxt.Test_frac_1000(1, 1000, 1); // 0.001
fxt.Test_frac_1000(1, 3, 333); // 0.33333333 fxt.Test_frac_1000(1, 3, 333); // 0.33333333
fxt.Test_frac_1000(1234, 1000, 234); // 1.234 fxt.Test_frac_1000(1234, 1000, 234); // 1.234
fxt.Test_frac_1000(12345, 10000, 234); // 1.2345 fxt.Test_frac_1000(12345, 10000, 234); // 1.2345
} }
@Test public void Lt() { @Test public void Lt() {
fxt.Test_comp_lt(1,123, 2, true); fxt.Test_comp_lt(1,123, 2, true);
fxt.Test_comp_lt(1,99999999, 2, true); fxt.Test_comp_lt(1,99999999, 2, true);
} }
@Test public void To_str_fmt() { @Test public void To_str_fmt() {
fxt.Test_to_str_fmt(1, 2, "0.0", "0.5"); fxt.Test_to_str_fmt(1, 2, "0.0", "0.5");
fxt.Test_to_str_fmt(1, 3, "0.0", "0.3"); fxt.Test_to_str_fmt(1, 3, "0.0", "0.3");
fxt.Test_to_str_fmt(10000, 7, "0,000.000", "1,428.571"); fxt.Test_to_str_fmt(10000, 7, "0,000.000", "1,428.571");
fxt.Test_to_str_fmt(1, 2, "00.00", "00.50"); fxt.Test_to_str_fmt(1, 2, "00.00", "00.50");
} }
@Test public void Round() { @Test public void Round() {
fxt.Test_round("123.456", 3, "123.456"); fxt.Test_round("123.456", 3, "123.456");
fxt.Test_round("123.456", 2, "123.46"); fxt.Test_round("123.456", 2, "123.46");
fxt.Test_round("123.456", 1, "123.5"); fxt.Test_round("123.456", 1, "123.5");

Loading…
Cancel
Save