diff --git a/stack/maxima/assessment.mac b/stack/maxima/assessment.mac index e102cdf5189f4b3e6f6547e3549490d7712daa05..560fc2ef99e48a187bc7cd846a5a832174772cc9 100644 --- a/stack/maxima/assessment.mac +++ b/stack/maxima/assessment.mac @@ -735,8 +735,14 @@ decimalplacesfun(ex, n, dispdps) := block([ex2], ex2:ev(float(round(10^n*float(ex))/(10^n)), lg=logbasesimp, simp), if dispdps then ex2:displaydp(ex2, n), return(ex2) - )$ -decimalplaces(ex, n) := decimalplacesfun(ex, n, false)$ +)$ + +decimalplaces(ex, n):= block( + if n=0 then return(round(ex)), + if integerp(ex) then return(ex), + decimalplacesfun(ex, n, false) +)$ + dispdp(ex, n) := block( if not(real_numberp(ex)) then error("dispdp requires a real number argument."), if not(integerp(n)) then error("dispdp cannot create a non-integer number of decimal places."), diff --git a/tests/castext_test.php b/tests/castext_test.php index db009b1f4897380a8f10b8fdd40e7a2aa46fa040..421384cfefba912933ee035d0b699f6d15419c4a 100644 --- a/tests/castext_test.php +++ b/tests/castext_test.php @@ -816,12 +816,12 @@ class castext_test extends qtype_stack_testcase { } $cs2 = new stack_cas_session2($s2, null, 0); - $at1 = castext2_evaluatable::make_from_source('{@dispdp(a,2)@}, {@dispdp(b,3)@}, {@dispsf(b,4)@}', 'test-case'); + $at1 = castext2_evaluatable::make_from_source('{@dispdp(a,2)@}, {@dispdp(b,3)@}, {@dispsf(b,4)@}, {@decimalplaces(a,0)@}, {@decimalplaces(1,2)@}', 'test-case'); $this->assertTrue($at1->get_valid()); $cs2->add_statement($at1); $cs2->instantiate(); - $this->assertEquals('\({2.72}\), \({4.000}\), \({4.000}\)', $at1->get_rendered()); + $this->assertEquals('\({2.72}\), \({4.000}\), \({4.000}\), \({3}\), \({1}\)', $at1->get_rendered()); } /** @@ -835,12 +835,12 @@ class castext_test extends qtype_stack_testcase { } $cs2 = new stack_cas_session2($s2, null, 0); - $at1 = castext2_evaluatable::make_from_source('{@dispdp(a,0)*x^2@}, {@dispdp(b,3)@}, {@dispsf(b,4)@}', 'test-case'); + $at1 = castext2_evaluatable::make_from_source('{@dispdp(a,0)*x^2@}, {@dispdp(b,3)@}, {@dispsf(b,4)@}, {@decimalplaces(a,0)@}, {@decimalplaces(1,2)@}', 'test-case'); $this->assertTrue($at1->get_valid()); $cs2->add_statement($at1); $cs2->instantiate(); - $this->assertEquals('\({3\cdot x^2}\), \({-4.000}\), \({-4.000}\)', $at1->get_rendered()); + $this->assertEquals('\({3\cdot x^2}\), \({-4.000}\), \({-4.000}\), \({3}\), \({1}\)', $at1->get_rendered()); } /** @@ -854,7 +854,7 @@ class castext_test extends qtype_stack_testcase { } $cs2 = new stack_cas_session2($s2, null, 0); - $at1 = castext2_evaluatable::make_from_source('{@dispdp(a1,0)*x^2@}, {@dispdp(b,3)@}, {@dispsf(b,4)@}', 'test-case'); + $at1 = castext2_evaluatable::make_from_source('{@dispdp(a1,0)*x^2@}, {@dispdp(b,3)@}, {@dispsf(b,4)@}, {@decimalplaces(a,0)@}, {@decimalplaces(1,2)@}', 'test-case'); $this->assertTrue($at1->get_valid()); $cs2->add_statement($at1); $cs2->instantiate();