Skip to content

Instantly share code, notes, and snippets.

@Didgeridrew
Last active August 6, 2023 00:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Didgeridrew/88175322bf8028b43fc3612246fb8416 to your computer and use it in GitHub Desktop.
Save Didgeridrew/88175322bf8028b43fc3612246fb8416 to your computer and use it in GitHub Desktop.
HA- Macro to convert text numbers to integers
{%- macro _int_parser(text) -%}
{%- set num_names = {
'zero': 0, 'one': 1, 'two': 2, 'three': 3,
'four': 4, 'five': 5, 'six': 6, 'seven': 7,
'eight': 8, 'nine': 9, 'ten': 10, 'eleven': 11,
'twelve': 12, 'thirteen': 13, 'fourteen': 14, 'fifteen': 15,
'sixteen': 16, 'seventeen': 17, 'eighteen': 18, 'nineteen': 19,
'twenty': 20, 'thirty': 30, 'forty': 40, 'fifty': 50,
'sixty': 60, 'seventy': 70, 'eighty': 80, 'ninety': 90} -%}
{%- set ns = namespace(numbers = [])%}
{%- set t_split = text.replace('-', ' ').replace(' and ', ' ').split(' ') %}
{%- for item in t_split %}
{%- if item in num_names %}
{%- set ns.numbers = ns.numbers + [num_names[item]] %}
{%- elif item == 'hundred' %}
{%- set ns.numbers = ns.numbers + [ns.numbers[-1] * 100 - ns.numbers[-1]] %}
{%- endif %}
{%- endfor %}
{{- ns.numbers|sum }}
{% endmacro %}
{% macro to_numeral(text_num) %}
{%- if not text_num|is_number %}
{%- set p = namespace(numbers = [], n_string=text_num) %}
{%- set orders = {"thousand": 3,"million": 6,"billion": 9} %}
{%- for order in p.n_string.split(' ')| select('in', orders.keys())|list %}
{% set p.numbers = p.numbers + [(_int_parser(p.n_string.split(' '~order)[0]))|trim|int * (10**orders.get(order))] %}
{%- set p.n_string = p.n_string.split(order)[1] %}
{%- endfor %}
{% if p.n_string.split(' ')|count > 0 %}
{% set p.numbers = p.numbers + [(_int_parser(p.n_string))|trim|int] %}
{% endif %}
{{ p.numbers|sum }}
{%- else %}
{{- text_num|int }}
{%- endif %}
{%- endmacro %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment