Number in full is not displayed correctly in case of unit and ten

Asked

Viewed 344 times

-1

When three numbers are typed the program displays the full name correctly, but when 2 or 1 number is typed it displays in the wrong order, example: I typed 51, it returns:

Unidade = 
Dezena = 1
Centena = 5

Unidade = 
Dezena = Décimo
Centena = Quingentésimo 

that is, I wanted him to take only the ten plus the unit, in the case of the example: Fifty-first

Follows the code:

<!DOCTYPE html>
<html>
<head>
    <title>Portfolio</title>
</head>
<body>
    <form method="post" action="outro.php">
        Numero: <input type="text" name="numero">
        <br>
        <input type="submit" name="Exibir">
    </form>
</body>
</html>


<?php
    // receber o número digitado
    $num = $_POST["numero"];

    echo "Número digitado: $num<br>";

    /*if ($num > 1000) {
        echo "Digite um número até mil";
        return false;
    } 

    if ($num === 1000) {
        echo "Milésimo";
    }*/

    $unidade = substr($num,2,1); // criar um array(vetor) pra cada unidade
    $dezena  = substr($num,1,1);
    $centena = substr($num,0,1);

    echo "<br>Unidade = $unidade";
    echo "<br>Dezena  = $dezena";
    echo "<br>Centena = $centena";

    // Vetor de Unidade
    $aUnidade[0] = "Zero";
    $aUnidade[1] = "Primeiro";
    $aUnidade[2] = "Segundo";
    $aUnidade[3] = "Terceiro";
    $aUnidade[4] = "Quarto";
    $aUnidade[5] = "Quinto";
    $aUnidade[6] = "Sexto";
    $aUnidade[7] = "Sétimo";
    $aUnidade[8] = "Oitavo";
    $aUnidade[9] = "Nono";

    // Vetor de Dezena
    $aDezena[0] = "";
    $aDezena[1] = "Décimo";
    $aDezena[2] = "Vigésimo";
    $aDezena[3] = "Trigésimo";
    $aDezena[4] = "Quadragésimo";
    $aDezena[5] = "Quinquagésimo";
    $aDezena[6] = "Sexagésimo";
    $aDezena[7] = "Septuagésimo ";
    $aDezena[8] = "Octogésimo ";
    $aDezena[9] = "Nonagésimo";

    // Vetor de Centena
    $aCentena[0] = "";
    $aCentena[1] = "Centésimo";
    $aCentena[2] = "Ducentésimo ";
    $aCentena[3] = "Tricentésimo ";
    $aCentena[4] = "Quadringentésimo ";
    $aCentena[5] = "Quingentésimo ";
    $aCentena[6] = "Sexcentésimo ";
    $aCentena[7] = "Septingentésimo ";
    $aCentena[8] = "Octingentésimo ";
    $aCentena[9] = "Nongentésimo ";

    echo "<br><br>";
    echo "Unidade = $aUnidade[$unidade]<br>";
    echo "Dezena  = $aDezena[$dezena]<br>";
    echo "Centena = $aCentena[$centena]<br>";

    echo "<br>";

    if (strlen($num) == 3) {
        echo "$aCentena[$centena] $aDezena[$dezena] $aUnidade[$unidade]";
    } elseif (strlen($num) == 2) {
        echo "$aDezena[$dezena] $aUnidade[$unidade]";
    } elseif (strlen($num) == 1) {
        echo "$aDezena[$dezena]";
    }
?>
  • I think you’ll have to improve this algorithm well, the generation of the extender is much more complicated than that.

  • Because it’s expensive, I noticed this by looking at forums, the code to generate the extensive is much more complex, the problem is that it is quite complicated for a beginner

  • With class NumberFormatter of intl it is possible to do this in English: https://ideone.com/ZzuSVW. Perhaps with the installation of some additional file it is also possible in Portuguese.

1 answer

0

I made a function for that, see if it helps you. Follow:

function num_ordem($num=1,$masc_fem='M')
{ 

if (strlen($num) == 3) {
    $unidade = substr($num,2,1); // criar um array(vetor) pra cada unidade
    $dezena  = substr($num,1,1);
    $centena = substr($num,0,1);
} elseif (strlen($num) == 2) {
    $unidade = substr($num,1,1); // criar um array(vetor) pra cada unidade
    $dezena  = substr($num,0,1);
} elseif (strlen($num) == 1) {
    $unidade = substr($num,0,1); // criar um array(vetor) pra cada unidade
}

// Vetor de Unidade
if ($masc_fem=='M')$cons='o'; else $cons='a';
$aUnidade[0] = "Zer".$cons;
$aUnidade[1] = "Primeir".$cons;
$aUnidade[2] = "Segund".$cons;
$aUnidade[3] = "Terceir".$cons;
$aUnidade[4] = "Quart".$cons;
$aUnidade[5] = "Quint".$cons;
$aUnidade[6] = "Sext".$cons;
$aUnidade[7] = "Sétim".$cons;
$aUnidade[8] = "Oitav".$cons;
$aUnidade[9] = "Non".$cons;

// Vetor de Dezena
$aDezena[0] = "";
$aDezena[1] = "Décim".$cons;
$aDezena[2] = "Vigésim".$cons;
$aDezena[3] = "Trigésim".$cons;
$aDezena[4] = "Quadragésim".$cons;
$aDezena[5] = "Quinquagésim".$cons;
$aDezena[6] = "Sexagésim".$cons;
$aDezena[7] = "Septuagésim".$cons." ";
$aDezena[8] = "Octogésim".$cons." ";
$aDezena[9] = "Nonagésim".$cons;

// Vetor de Centena
$aCentena[0] = "";
$aCentena[1] = "Centésim".$cons;
$aCentena[2] = "Ducentésim".$cons." ";
$aCentena[3] = "Tricentésim".$cons." ";
$aCentena[4] = "Quadringentésim".$cons." ";
$aCentena[5] = "Quingentésim".$cons." ";
$aCentena[6] = "Sexcentésim".$cons." ";
$aCentena[7] = "Septingentésim".$cons." ";
$aCentena[8] = "Octingentésim".$cons." ";
$aCentena[9] = "Nongentésim".$cons." ";

if (strlen($num) == 3) {
    return "$aCentena[$centena] $aDezena[$dezena] $aUnidade[$unidade]";
} elseif (strlen($num) == 2) {
    return "$aDezena[$dezena] $aUnidade[$unidade]";
} elseif (strlen($num) == 1) {
    return "$aUnidade[$unidade]";
}

}

Browser other questions tagged

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