Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Hello, @ortollj! This is not a bug. The problem with the third "show" line (the direct rounding) is that, technically speaking, S.subs(tbNum) is an expression, not a number. You can verify with show(type(S.subs(tbNum))). Mathematically, there is no difference between the expression S.subs(tbNum) and the number S.subs(tbNum).n()$\approx0.6095712$. However, from the computer point of view, they have different data-types, the former a <class 'sage.symbolic.expression.Expression'> and the latter a <class 'sage.rings.real_mpfr.RealNumber'>. The round() function can only be applied to numerical data types. Conceptually, this is equivalent to try to round a string, as in round('hello', 7), although more easily confusing.

So, the solution is to first convert S to a numerical type using the method n() (or other less elegant alternatives) and then apply round(), as you did in the first two "show" lines. Alternatively, you can do the same in one step by using the digits argument for n(), as in the following bit of code:

show("round directly : ", S.subs(tbNum).n(digits=rd))

I hope this helps!