fix negative sign issue, and gracefully degrade precision by lopping off decimal places