diff --git a/100_core/src/gplx/Decimal_adp.java b/100_core/src/gplx/Decimal_adp.java index 673356c3f..14b1499a7 100644 --- a/100_core/src/gplx/Decimal_adp.java +++ b/100_core/src/gplx/Decimal_adp.java @@ -80,6 +80,9 @@ public class Decimal_adp implements CompareAble { } return new Decimal_adp(new_val); } + public Decimal_adp Round_to_default_precision() { + return new Decimal_adp(under.round(Decimal_adp_.Gplx_rounding_context)); + } public boolean Comp_gte(Decimal_adp v) {return under.doubleValue() >= v.under.doubleValue();} public boolean Comp_gte(int v) {return under.doubleValue() >= v;} public boolean Comp_lte(Decimal_adp v) {return under.doubleValue() <= v.under.doubleValue();} diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Func_tkn_ln.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Func_tkn_ln.java index 6c56539e7..bd0e7b1ec 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Func_tkn_ln.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Func_tkn_ln.java @@ -23,7 +23,9 @@ class Func_tkn_ln extends Func_tkn_base { @Override public boolean Calc_hook(Xop_ctx ctx, Pfunc_expr_shunter shunter, Val_stack val_stack) { Decimal_adp val = val_stack.Pop(); if (val.Comp_lte(0)) {shunter.Err_set(ctx, Xol_msg_itm_.Id_pfunc_expr_invalid_argument_ln); return false;} - val_stack.Push(Decimal_adp_.double_(Math_.Log(val.To_double()))); + val = Decimal_adp_.double_(Math_.Log(val.To_double())); + val = val.Round_to_default_precision();// NOTE: needed for test; may need to apply to other ops; DATE:2020-03-24 + val_stack.Push(val); return true; } } diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_shunter.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_shunter.java index 8de6c9a19..307a5543e 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_shunter.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_shunter.java @@ -95,6 +95,7 @@ public class Pfunc_expr_shunter { } if (num == null) return Null_rslt; } + num = num.Round_to_default_precision(); // PURPOSE: number should be set to precision of 14; PAGE:de.wikipedia.org/wiki/Nationalpark_Mu_Ko_Ang_Thong ISSUE#:683 DATE:2020-03-24 val_stack.Push(num); mode_expr = false; break; diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_tst.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_tst.java index 6a021986f..1a0e78a54 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/exprs/Pfunc_expr_tst.java @@ -112,4 +112,7 @@ public class Pfunc_expr_tst { @Test public void Exc_unrecognized_word_ornot() {fxt.Test_parse_tmpl_str_test("{{#expr:0ornot0}}" , "{{test}}" , "Expression error: Unrecognised word \"ornot\"");} // PURPOSE: handle nan; EX: w:Help:Calculation @Test public void Exc_unrecognized_word_notnot() {fxt.Test_parse_tmpl_str_test("{{#expr:notnot0}}" , "{{test}}" , "Expression error: Unrecognised word \"notnot\"");} // PURPOSE: handle nan; EX: w:Help:Calculation @Test public void Exc_unrecognized_word_sinln() {fxt.Test_parse_tmpl_str_test("{{#expr:sinln1.1}}" , "{{test}}" , "Expression error: Unrecognised word \"sinln\"");} // PURPOSE: handle nan; EX: w:Help:Calculation + @Test public void Num_precision() {// PURPOSE: number should be set to precision of 14; PAGE:de.wikipedia.org/wiki/Nationalpark_Mu_Ko_Ang_Thong ISSUE#:683 DATE:2020-03-24 + fxt.Test__parse__tmpl_to_html("{{#expr:15.064329981401556}}", "15.064329981402"); // fails if 15.06432998140155 + } }