Error on date output in full: decimal number goes up to 5

Asked

Viewed 141 times

0

when entering the numeric values to be converted to Spellnumber, there is a lack of letters

value | output

25.25 | Twenty here five royal and twenty here five cents. - missing letter 'and'

225.25 | Two hundred and twenty here five royal and twenty here five cents. - missing letter 'and'

2225.25| Two thousand two hundred and twenty here five royal and twenty here five cents - missing the letter 'and'

code

<?php
function converterNumeroPalavra($n) {

    $numeros[1][0] = '';
    $numeros[1][1] = 'um';
    $numeros[1][2] = 'dois';
    $numeros[1][3] = 'três';
    $numeros[1][4] = 'quatro';
    $numeros[1][5] = 'cinco';
    $numeros[1][6] = 'seis';
    $numeros[1][7] = 'sete';
    $numeros[1][8] = 'oito';
    $numeros[1][9] = 'nove';

    $numeros[2][0] = '';
    $numeros[2][10] = 'dez';
    $numeros[2][11] = 'onze';
    $numeros[2][12] = 'doze';
    $numeros[2][13] = 'treze';
    $numeros[2][14] = 'quatorze';
    $numeros[2][15] = 'quinze';
    $numeros[2][16] = 'dezesseis';
    $numeros[2][17] = 'dezesete';
    $numeros[2][18] = 'dezoito';
    $numeros[2][19] = 'dezenove';
    $numeros[2][2] = 'vinte';
    $numeros[2][3] = 'trinta';
    $numeros[2][4] = 'quarenta';
    $numeros[2][5] = 'cinquenta';
    $numeros[2][6] = 'sessenta';
    $numeros[2][7] = 'setenta';
    $numeros[2][8] = 'oitenta';
    $numeros[2][9] = 'noventa';

    $numeros[3][0] = '';
    $numeros[3][1] = 'cem';
    $numeros[3][2] = 'duzentos';
    $numeros[3][3] = 'trezentos';
    $numeros[3][4] = 'quatrocentos';
    $numeros[3][5] = 'quinhentos';
    $numeros[3][6] = 'seiscentos';
    $numeros[3][7] = 'setecentos';
    $numeros[3][8] = 'oitocentos';
    $numeros[3][9] = 'novecentos';




    $qtd = strlen($n);

    $compl[0] = ' mil ';
    $compl[1] = ' milhão ';
    $compl[2] = ' milhões ';
    $numero = "";
    $casa = $qtd;
    $pulaum = false;
    $x = 0;

    for ($y = 0; $y < $qtd; $y++) {


        if ($casa == 6) {

            if ($n[$x] == '1') {

                $indice = '1' . $n[$x + 1];
                $pulaum = true;
            } else {

                $indice = $n[$x];
            }

            if ($n[$x] != '0') {

                if (isset($n[$x - 1])) {

                    $numero .= ' e ';
                }

                $numero .= $numeros[3][$indice];

                if ($pulaum) {

                    $numero .= ' ' . $compl[0];
                }
            }
        }


        if ($casa == 5) {

            if ($n[$x] == '1') {

                $indice = '1' . $n[$x + 1];
                $pulaum = true;
            } else {

                $indice = $n[$x];
            }

            if ($n[$x] != '0') {

                if (isset($n[$x - 1])) {

                    $numero .= ' e ';
                }

                $numero .= $numeros[2][$indice];

                if ($pulaum) {

                    $numero .= ' ' . $compl[0];
                }
            }
        }

        if ($casa == 4) {

            if (!$pulaum) {

                if ($n[$x] != '0') {

                    if (isset($n[$x - 1])) {

                        $numero .= ' e ';
                    }
                }
            }

            $numero .= $numeros[1][$n[$x]] . ' ' . $compl[0];
        }

        if ($casa == 3) {

            if ($n[$x] == '1' && $n[$x + 1] != '0') {

                $numero .= 'cento ';
            } else {

                if ($n[$x] != '0') {

                    if (isset($n[$x - 1])) {

                        $numero .= ' e ';
                    }

                    $numero .= $numeros[3][$n[$x]];
                }
            }
        }

        if ($casa == 2) {

            if ($n[$x] == '1') {

                $indice = '1' . $n[$x + 1];
                $casa = 0;
            } else {

                $indice = $n[$x];
            }

            if ($n[$x] != '0') {

                if (isset($n[$x - 1])) {

                    $numero .= " e ";
                }

                $numero .= $numeros[2][$indice];
            }
        }

        if ($casa == 1) {

            if ($n[$x] != '0') {
                if ($numeros[1][$n[$x]] <= 10)
                    $numero .= ' ' . $numeros[1][$n[$x]];
                else
                    $numero .= ' e ' . $numeros[1][$n[$x]];
            } else {

                $numero .= '';
            }
        }

        if ($pulaum) {

            $casa--;
            $x++;
            $pulaum = false;
        }

        $casa--;
        $x++;
    }

    if($casa > 3)
        $numero = str_replace(' ', ' e ', $numero);

    return $numero;

}


?>

code

<?php

include '../../util/converterNumeroPalavra.php';

/**
 * Retorna uma string do valor 
 *  
 * @param string $n - Valor a ser traduzido, pode ser no formato americano ou brasileiro
 * @example escreverValorMoeda('1.530,64');
 * @example escreverValorMoeda('1530.64');
 * @return string 
 */
function converterNumeroMoeda($n){
    //Converte para o formato float 
    if(strpos($n, ',') !== FALSE){
        $n = str_replace('.','',$n); 
        $n = str_replace(',','.',$n);
    }

    //Separa o valor "reais" dos "centavos"; 
    $n = explode('.',$n);

    if($n[0]>1){
        $string =  ucfirst(converterNumeroPalavra($n[0])). ' reais' . ((isset($n[1]) && $n[1] > 0)?' e '.converterNumeroPalavra($n[1]).' centavos.':'');
    }
    else if($n[0]==1){
        $string =  ucfirst(converterNumeroPalavra($n[0])). ' real' . ((isset($n[1]) && $n[1] > 0)?' e '.converterNumeroPalavra($n[1]).' centavos.':'');
    }else if($n[0]==0){
        $string =  ucfirst(converterNumeroPalavra($n[0])). ' ' .((isset($n[1]) && $n[1] > 0)?'  '.converterNumeroPalavra($n[1]).' centavos.':'');
    }

    return $string;
}
?>
  • And when it’s 1120? The writing gets weird not?

1 answer

1


Follows modified code

Just call Function and write.

function numeroEscrito($n) {
 
    $numeros[1][0] = '';
    $numeros[1][1] = 'um';
    $numeros[1][2] = 'dois';
    $numeros[1][3] = 'três';
    $numeros[1][4] = 'quatro';
    $numeros[1][5] = 'cinco';
    $numeros[1][6] = 'seis';
    $numeros[1][7] = 'sete';
    $numeros[1][8] = 'oito';
    $numeros[1][9] = 'nove';
 
    $numeros[2][0] = '';
    $numeros[2][10] = 'dez';
    $numeros[2][11] = 'onze';
    $numeros[2][12] = 'doze';
    $numeros[2][13] = 'treze';
    $numeros[2][14] = 'quatorze';
    $numeros[2][15] = 'quinze';
    $numeros[2][16] = 'dezesseis';
    $numeros[2][17] = 'dezesete';
    $numeros[2][18] = 'dezoito';
    $numeros[2][19] = 'dezenove';
    $numeros[2][2] = 'vinte';
    $numeros[2][3] = 'trinta';
    $numeros[2][4] = 'quarenta';
    $numeros[2][5] = 'cinquenta';
    $numeros[2][6] = 'sessenta';
    $numeros[2][7] = 'setenta';
    $numeros[2][8] = 'oitenta';
    $numeros[2][9] = 'noventa';
 
    $numeros[3][0] = '';
    $numeros[3][1] = 'cem';
    $numeros[3][2] = 'duzentos';
    $numeros[3][3] = 'trezentos';
    $numeros[3][4] = 'quatrocentos';
    $numeros[3][5] = 'quinhentos';
    $numeros[3][6] = 'seiscentos';
    $numeros[3][7] = 'setecentos';
    $numeros[3][8] = 'oitocentos';
    $numeros[3][9] = 'novecentos';
 
    $qtd = strlen($n);
 
    $compl[0] = ' mil ';
    $compl[1] = ' milhão ';
    $compl[2] = ' milhões ';
    $numero = "";
    $casa = $qtd;
    $pulaum = false;
    $x = 0;
    for ($y = 0; $y < $qtd; $y++) {
 
        if ($casa == 5) {
 
            if ($n[$x] == '1') {
 
                $indice = '1' . $n[$x + 1];
                $pulaum = true;
            } else {
 
                $indice = $n[$x];
            }
 
            if ($n[$x] != '0') {
 
                if (isset($n[$x - 1])) {
 
                    $numero .= ' e ';
                }
 
                $numero .= $numeros[2][$indice];
 
                if ($pulaum) {
 
                    $numero .= ' ' . $compl[0];
                }
            }
        }
 
        if ($casa == 4) {
 
            if (!$pulaum) {
 
                if ($n[$x] != '0') {
 
                    if (isset($n[$x - 1])) {
 
                        $numero .= ' e ';
                    }
                }
            }
 
            $numero .= $numeros[1][$n[$x]] . ' ' . $compl[0];
        }
 
        if ($casa == 3) {
 
            if ($n[$x] == '1' && $n[$x + 1] != '0') {
 
                $numero .= 'cento ';
            } else {
 
                if ($n[$x] != '0') {
 
                    if (isset($n[$x - 1])) {
 
                        $numero .= ' e ';
                    }
 
                    $numero .= $numeros[3][$n[$x]];
                }
            }
        }
 
        if ($casa == 2) {
 
            if ($n[$x] == '1') {
 
                $indice = '1' . $n[$x + 1];
                $casa = 0;
            } else {
 
                $indice = $n[$x];
            }
 
            if ($n[$x] != '0') {
 
                if (isset($n[$x - 1])) {
 
                    $numero .= ' e ';
                }
 
                $numero .= $numeros[2][$indice];
            }
        }
 
        if ($casa == 1) {
 
            if ($n[$x] != '0') {
                if ($numeros[1][$n[$x]] <= 10)
                    $numero .= ' ' . $numeros[1][$n[$x]];
                else
                    $numero .= ' e ' . $numeros[1][$n[$x]];
            } else {
 
                $numero .= '';
            }
        }
 
        if ($pulaum) {
 
            $casa--;
            $x++;
            $pulaum = false;
        }
 
        $casa--;
        $x++;
    }
 
    return $numero;
}


function escreverValorMoeda($n){
    //Converte para o formato float 
    if(strpos($n, ',') !== FALSE){
        $n = str_replace('.','',$n); 
        $n = str_replace(',','.',$n);
    }
 
    //Separa o valor "reais" dos "centavos"; 
    $n = explode('.',$n);
 
    return ucfirst(numeroEscrito($n[0])). ' reais' . ((isset($n[1]) && $n[1] > 0)?' e '.numeroEscrito($n[1]).' centavos.':'');
 
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.