Extract fractional_from_other method

Allows the removal of some duplication in exchange arithmetic

This is potentially an alternative to #304 - it removes some of the duplication while hopefully maintaining some of the clarity around intention.