diff --git a/pint/quantity.py b/pint/quantity.py index 22dc875..a816787 100644 --- a/pint/quantity.py +++ b/pint/quantity.py @@ -317,7 +317,7 @@ class _Quantity(SharedRegistryObject): >>> (1e-2*ureg('kg m/s^2')).to_compact('N') """ - if self.unitless: + if self.unitless or self.magnitude==0: return self SI_prefixes = {} 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 a6f00c7..4f7ad78 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 @@ -1108,6 +1109,9 @@ class UnitRegistry(object): if isinstance(value, Decimal): factor = Decimal(str(factor)) + if isinstance(value, Fraction): + factor = Fraction(str(factor)) + if inplace: value *= factor else: