2
respostas

[Projeto] [php] Controle de Saldo via Terminal

Resultado do projeto da aula 5, atividades 1 e 2:

A dúvida que ficou foi relacionada é a atribuição do saldo 1_000 para o valor 1000, e porque o retorno sempre cálcula em inteiro, quando utilizei um float, e a entrada float usa . ou ,?

<?php

$saldo = 1_000;
$titularConta = 'Mauricio Lemme';

echo "*****************************\n";
echo "Titular: $titularConta\n";
echo "Saldo atual: R$ $saldo\n";
echo "*****************************\n";

do {
    
    echo "1 - Consultar saldo atual\n";
    echo "2 - Sacar\n";
    echo "3 - Depositar\n";
    echo "4 - Sair\n";

    $opcao = (int) fgets(STDIN);

    switch ($opcao) {
        case 1:
            echo "*****************************\n";
            echo "Titular: $titularConta\n";
            echo "Saldo atual: R$ $saldo\n";
            echo "*****************************\n";
            break;
        case 2:
            echo "Qual valor deseja sacar?\n";
            $valorASacar = (float) fgets(STDIN);
            if ($valorASacar > $saldo) {
                echo "Saldo insuficiente\n";
            }else{
                $saldo -= $valorASacar;
            }
            break;
        case 3:
            echo "Qual valor deseja depositar?\n";
            $valorADepositar = (float) fgets(STDIN) ?? 0;
            $valorADepositar = $valorADepositar < 0 ? 0 : $valorADepositar;
            $saldo += $valorADepositar;
            break;
        case 4:
            echo "Adeus\n";
            break;
        default:
            echo "Opçaõ inválida\n";
            break;
    }
} while ($opcao != 4);
2 respostas

Bom dia brother, posso estar enganado porém o 1_000 é mais para facilitar nossa leitura em grandes números com zeros na linguagem de PHP tem essa praticidade, como na matemática alguns números elevados a 10 para facilitar a leitura. Continuando, você definiu o retorno de "$opcao = (int) fgets(STDIN);" sempre sendo inteiro (int), então por mais que coloque um valor float, o php vai tentar interpretar como inteiro. E por último, pontos flutuantes em PHP são com pontos (.)

segue o link para documentação de números flutuantes se quiser dar uma olhada em PHP https://www.php.net/manual/pt_BR/language.types.float.php

Não é relacionado ao valor de entrada em $opção, é nesse trecho aqui:

            echo "*****************************\n";
            echo "Titular: $titularConta\n";
            echo "Saldo atual: R$ $saldo\n";
            echo "*****************************\n";
            break;

Por mais que as operações sejam em float nessas partes:

    case 2:
            echo "Qual valor deseja sacar?\n";
            $valorASacar = (float) fgets(STDIN);
            if ($valorASacar > $saldo) {
                echo "Saldo insuficiente\n";
            }else{
                $saldo -= $valorASacar;
            }
            break;
        case 3:
            echo "Qual valor deseja depositar?\n";
            $valorADepositar = (float) fgets(STDIN) ?? 0;
            $valorADepositar = $valorADepositar < 0 ? 0 : $valorADepositar;
            $saldo += $valorADepositar;
            break;

Quando chamo a opção 'um', o 'echo' retorna em inteiro, mas minha dúvida sobre o ponto talvez resolva porque quando testei usei ',' como separador na entrada do terminal