mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 14:52:25 +00:00
[fix] Allow to pass floats to Num2Word_Base.to_splitnum()
This commit is contained in:
@@ -111,13 +111,7 @@ class Num2Word_Base(object):
|
|||||||
return self.title(out + words)
|
return self.title(out + words)
|
||||||
|
|
||||||
|
|
||||||
def to_cardinal_float(self, value):
|
def float2tuple(self, value):
|
||||||
try:
|
|
||||||
float(value) == value
|
|
||||||
except (ValueError, TypeError, AssertionError):
|
|
||||||
raise TypeError(self.errmsg_nonnum % value)
|
|
||||||
|
|
||||||
value = float(value)
|
|
||||||
pre = int(value)
|
pre = int(value)
|
||||||
post = abs(value - pre) * 10**self.precision
|
post = abs(value - pre) * 10**self.precision
|
||||||
if abs(round(post) - post) < 0.01:
|
if abs(round(post) - post) < 0.01:
|
||||||
@@ -127,6 +121,18 @@ class Num2Word_Base(object):
|
|||||||
post = int(round(post))
|
post = int(round(post))
|
||||||
else:
|
else:
|
||||||
post = int(math.floor(post))
|
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 = str(post)
|
||||||
post = '0' * (self.precision - len(post)) + post
|
post = '0' * (self.precision - len(post)) + post
|
||||||
|
|
||||||
@@ -213,12 +219,17 @@ class Num2Word_Base(object):
|
|||||||
|
|
||||||
#//CHECK: generalise? Any others like pounds/shillings/pence?
|
#//CHECK: generalise? Any others like pounds/shillings/pence?
|
||||||
def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="",
|
def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="",
|
||||||
divisor=100, longval=True, cents = True):
|
divisor=100, longval=True, cents=True):
|
||||||
out = []
|
out = []
|
||||||
try:
|
|
||||||
high, low = val
|
if isinstance(val, float):
|
||||||
except TypeError:
|
high, low = self.float2tuple(val)
|
||||||
high, low = divmod(val, divisor)
|
else:
|
||||||
|
try:
|
||||||
|
high, low = val
|
||||||
|
except TypeError:
|
||||||
|
high, low = divmod(val, divisor)
|
||||||
|
|
||||||
if high:
|
if high:
|
||||||
hightxt = self.title(self.inflect(high, hightxt))
|
hightxt = self.title(self.inflect(high, hightxt))
|
||||||
out.append(self.to_cardinal(high))
|
out.append(self.to_cardinal(high))
|
||||||
@@ -230,6 +241,7 @@ class Num2Word_Base(object):
|
|||||||
out.append(self.title(jointxt))
|
out.append(self.title(jointxt))
|
||||||
elif hightxt:
|
elif hightxt:
|
||||||
out.append(hightxt)
|
out.append(hightxt)
|
||||||
|
|
||||||
if low:
|
if low:
|
||||||
if cents:
|
if cents:
|
||||||
out.append(self.to_cardinal(low))
|
out.append(self.to_cardinal(low))
|
||||||
@@ -237,6 +249,7 @@ class Num2Word_Base(object):
|
|||||||
out.append("%02d" % low)
|
out.append("%02d" % low)
|
||||||
if lowtxt and longval:
|
if lowtxt and longval:
|
||||||
out.append(self.title(self.inflect(low, lowtxt)))
|
out.append(self.title(self.inflect(low, lowtxt)))
|
||||||
|
|
||||||
return " ".join(out)
|
return " ".join(out)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user