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();