If you need a calculator, with ability to do symbolic maths, bigints, plotting and support for units, there is no need to build on from scratch… Maxima is free, long-established, and can be run via Jupyter (see for a fixed-up dockererised version, try out on BinderHub note may take some time to start for first time while binderhub rebuilds the container).

It supports units using the bult-in ezunits module:

load ("ezunits")$load ("physical_constants")$


For example:

1kg + 1g;


is by default printed in its original symbolic form:

$\mathrm{kg}+1\;\mathrm{g}$

But can be converted to grams using:

%  g;


$$1001\;\mathrm{g}$$

Or to kilograms:

%  kg, numer;

$1.001\;\mathrm{kg}$

There are built-in physics constsants too:

%c;

$c$

The numerical value can be seen with:

constvalue(%c) ;

$299792458\;\frac{\mathrm{m}}{\mathrm{s}}$

Or in different units:

constvalue(%c)  cm / s , numer;

$2.99792458 \times 10^{+10}\;\frac{\mathrm{cm}}{\mathrm{s}}$

All the formating shown here is built-in but sometimes it needs a bit of fixing up:

100000 Pa  psi, numer;
`

gives the greek letter not, pounds-square-inch:

$14.50377377302092\;\psi$

You can try out all this and all the other Maxima features on BinderHub .