Precise numbers

Switch from Float to Rational to prevent different numbers from incorrectly comparing equal. Numbers in DynamoDB have much more precision than a Float, so many numbers incorrectly compare equal if converted to floats.