From 20c3cd69a91b7a5ba1a6ad8dbc62cc62a118ac00 Mon Sep 17 00:00:00 2001 From: Emilien Kofman Date: Wed, 13 Jan 2016 10:42:17 +0100 Subject: [PATCH] UnitRegistry.convert now returns a Fraction if the user submits a Fraction to it. I also added a test for this issue. --- pint/testsuite/test_issues.py | 6 ++++++ pint/unit.py | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/pint/testsuite/test_issues.py b/pint/testsuite/test_issues.py index db9100b..41cc4fa 100644 --- a/pint/testsuite/test_issues.py +++ b/pint/testsuite/test_issues.py @@ -507,3 +507,9 @@ class TestIssuesNP(QuantityTestCase): t = copy.deepcopy(q) u = t.to(ur.mF) self.assertQuantityEqual(q.to(ur.mF), u) + + def test_issue323(self): + from fractions import Fraction as F + self.assertEqual((self.Q_(F(2,3), 's')).to('ms'), self.Q_(F(2000,3), 'ms')) + self.assertEqual((self.Q_(F(2,3), 'm')).to('km'), self.Q_(F(1,1500), 'km')) + diff --git a/pint/unit.py b/pint/unit.py index 9acdae5..be00fe4 100644 --- a/pint/unit.py +++ b/pint/unit.py @@ -18,6 +18,7 @@ import functools import operator import pkg_resources from decimal import Decimal +from fractions import Fraction from contextlib import contextmanager, closing from io import open, StringIO from collections import defaultdict @@ -1109,6 +1110,9 @@ class UnitRegistry(object): if isinstance(value, Decimal): factor = Decimal(str(factor)) + if isinstance(value, Fraction): + factor = Fraction(Decimal(str(factor))) + if inplace: value *= factor else: