auto-determine num-break separator

If the remainder is less than 100, use " and ", otherwise use ", ". This
is not only simpler, but corrects numbers like "one million, one" to be
"one million and one".
This commit is contained in:
rovdyl 2019-02-05 20:29:45 -06:00
parent b72f76ea4f
commit acd9ef133c

View File

@ -85,60 +85,63 @@
:: ::
:: min: minimum to qualify for this break :: min: minimum to qualify for this break
:: str: english word for this break :: str: english word for this break
:: sep: separator between this and the previous break
:: ::
|= [min=@u str=tape sep=tape] |= [min=@u str=tape]
=/ rem (mod num min) =/ rem (mod num min)
:- ~ :- ~
%+ weld ;: weld
(weld (need ^$(num (div num min))) [' ' str]) (need ^$(num (div num min)))
?: =(rem 0) [' ' str]
~ ?: =(rem 0)
(weld sep (need ^$(num rem))) ~
%+ weld
?:((lth rem one-hundred) " and " ", ")
(need ^$(num rem))
==
:: ::
?: (lth num one-thousand) ?: (lth num one-thousand)
(num-break one-hundred "hundred" " and ") (num-break one-hundred "hundred")
?: (lth num one-million) ?: (lth num one-million)
(num-break one-thousand "thousand" ", ") (num-break one-thousand "thousand")
?: (lth num one-billion) ?: (lth num one-billion)
(num-break one-million "million" ", ") (num-break one-million "million")
?: (lth num one-trillion) ?: (lth num one-trillion)
(num-break one-billion "billion" ", ") (num-break one-billion "billion")
?: (lth num one-quadrillion) ?: (lth num one-quadrillion)
(num-break one-trillion "trillion" ", ") (num-break one-trillion "trillion")
?: (lth num one-quintillion) ?: (lth num one-quintillion)
(num-break one-quadrillion "quadrillion" ", ") (num-break one-quadrillion "quadrillion")
?: (lth num one-sextillion) ?: (lth num one-sextillion)
(num-break one-quintillion "quintillion" ", ") (num-break one-quintillion "quintillion")
?: (lth num one-septillion) ?: (lth num one-septillion)
(num-break one-sextillion "sextillion" ", ") (num-break one-sextillion "sextillion")
?: (lth num one-octillion) ?: (lth num one-octillion)
(num-break one-septillion "septillion" ", ") (num-break one-septillion "septillion")
?: (lth num one-nonillion) ?: (lth num one-nonillion)
(num-break one-octillion "octillion" ", ") (num-break one-octillion "octillion")
?: (lth num one-decillion) ?: (lth num one-decillion)
(num-break one-nonillion "nonillion" ", ") (num-break one-nonillion "nonillion")
?: (lth num one-undecillion) ?: (lth num one-undecillion)
(num-break one-decillion "decillion" ", ") (num-break one-decillion "decillion")
?: (lth num one-duodecillion) ?: (lth num one-duodecillion)
(num-break one-undecillion "undecillion" ", ") (num-break one-undecillion "undecillion")
?: (lth num one-tredecillion) ?: (lth num one-tredecillion)
(num-break one-duodecillion "duodecillion" ", ") (num-break one-duodecillion "duodecillion")
?: (lth num one-quattuordecillion) ?: (lth num one-quattuordecillion)
(num-break one-tredecillion "tredecillion" ", ") (num-break one-tredecillion "tredecillion")
?: (lth num one-quindecillion) ?: (lth num one-quindecillion)
(num-break one-quattuordecillion "quattuordecillion" ", ") (num-break one-quattuordecillion "quattuordecillion")
?: (lth num one-sexdecillion) ?: (lth num one-sexdecillion)
(num-break one-quindecillion "quindecillion" ", ") (num-break one-quindecillion "quindecillion")
?: (lth num one-septendecillion) ?: (lth num one-septendecillion)
(num-break one-sexdecillion "sexdecillion" ", ") (num-break one-sexdecillion "sexdecillion")
?: (lth num one-octodecillion) ?: (lth num one-octodecillion)
(num-break one-septendecillion "septendecillion" ", ") (num-break one-septendecillion "septendecillion")
?: (lth num one-novemdecillion) ?: (lth num one-novemdecillion)
(num-break one-octodecillion "octodecillion" ", ") (num-break one-octodecillion "octodecillion")
?: (lth num one-vigintillion) ?: (lth num one-vigintillion)
(num-break one-novemdecillion "novemdecillion" ", ") (num-break one-novemdecillion "novemdecillion")
?: (lth num max) ?: (lth num max)
(num-break one-vigintillion "vigintillion" ", ") (num-break one-vigintillion "vigintillion")
~ ~
-- --