1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
mod constantes;
mod helpers;

use constantes::*;
use helpers::*;

pub fn numero_por_extenso<T: Into<f64>>(_valor: T) -> String {
    let mut string = String::new();
    let _valor_string = _valor.into().to_string();
    let _separar_decimal: Vec<&str> = _valor_string.split(".").collect();

    let _inteiro = normalizar(String::from(_separar_decimal[0]));
    let mut _decimal = String::from("");

    if _separar_decimal.len() > 1 {
        _decimal = String::from(_separar_decimal[1]);
    }

    let quantidade_centena = ((_inteiro.len() as f32) / 3.0).round() as i32;

    for contador_centena in 0..quantidade_centena {
        let tripla: String = _inteiro
            .chars()
            .skip((contador_centena * 3) as usize)
            .take(3)
            .collect();
        let tripla_numero: i32 = tripla.parse().unwrap();
        let unidades_centena: Vec<&str> = tripla.split("").collect();

        let centena = CENTENAS[unidades_centena[1].parse::<usize>().unwrap()];
        let dezena = DEZENAS[unidades_centena[2].parse::<usize>().unwrap()];
        let dezena_composta = DEZENAS_COMPOSTAS[unidades_centena[3].parse::<usize>().unwrap()];
        let mut unidade = UNIDADES[unidades_centena[3].parse::<usize>().unwrap()];
        let casa = CASAS[(quantidade_centena - contador_centena - 1) as usize];
        let casa_plural = CASAS_PLURAL[(quantidade_centena - contador_centena - 1) as usize];

        if tripla_numero == 1 {
            unidade = "";
        }

        if centena != "" {
            string.push_str(centena);
            string.push_str(" e ");
        }

        if dezena == "dez" {
            string.push_str(dezena_composta);
        } else {
            if dezena != "" {
                string.push_str(dezena);
                string.push_str(" e ");
            }

            if unidade != "" {
                string.push_str(unidade);
            }
        }

        if casa != "" && casa_plural != "" {
            string.push_str(" ");

            if tripla_numero > 1 {
                string.push_str(casa_plural);
            } else {
                string.push_str(casa);
            }
            string.push_str(", ");
        }
    }

    string
}