From 8ecd10f0554287f0f0e27f85164c7d87d1f52ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Tue, 5 Sep 2017 22:42:45 +0200 Subject: [PATCH] [fix] Allow to pass `float`s to `Num2Word_Base.to_splitnum()` --- num2words/base.py | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/num2words/base.py b/num2words/base.py index 272d5bb..e1e4383 100644 --- a/num2words/base.py +++ b/num2words/base.py @@ -111,13 +111,7 @@ class Num2Word_Base(object): return self.title(out + words) - def to_cardinal_float(self, value): - try: - float(value) == value - except (ValueError, TypeError, AssertionError): - raise TypeError(self.errmsg_nonnum % value) - - value = float(value) + def float2tuple(self, value): pre = int(value) post = abs(value - pre) * 10**self.precision if abs(round(post) - post) < 0.01: @@ -127,6 +121,18 @@ class Num2Word_Base(object): post = int(round(post)) else: post = int(math.floor(post)) + + return pre, post + + + def to_cardinal_float(self, value): + try: + float(value) == value + except (ValueError, TypeError, AssertionError): + raise TypeError(self.errmsg_nonnum % value) + + pre, post = self.float2tuple(float(value)) + post = str(post) post = '0' * (self.precision - len(post)) + post @@ -213,12 +219,17 @@ class Num2Word_Base(object): #//CHECK: generalise? Any others like pounds/shillings/pence? def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="", - divisor=100, longval=True, cents = True): + divisor=100, longval=True, cents=True): out = [] - try: - high, low = val - except TypeError: - high, low = divmod(val, divisor) + + if isinstance(val, float): + high, low = self.float2tuple(val) + else: + try: + high, low = val + except TypeError: + high, low = divmod(val, divisor) + if high: hightxt = self.title(self.inflect(high, hightxt)) out.append(self.to_cardinal(high)) @@ -230,6 +241,7 @@ class Num2Word_Base(object): out.append(self.title(jointxt)) elif hightxt: out.append(hightxt) + if low: if cents: out.append(self.to_cardinal(low)) @@ -237,6 +249,7 @@ class Num2Word_Base(object): out.append("%02d" % low) if lowtxt and longval: out.append(self.title(self.inflect(low, lowtxt))) + return " ".join(out)