números extras anexados aos meus valores (PHP)

php - erro laravel: Classe alvo [validator] ...

Estou enfrentando um fenômeno muito estranho ao tentar separar números inteiros e decimais de um valor flutuante.

" . numToWords(1004712896.17);
function numToWords($value) : String
{   
    // $words is used to store the translated string
    $words = "";
    print "
VALUE: $value"; $whole = floor($value); print "
WHOLE: $whole"; $deci = $value - $whole; print "
DECI: $deci"; // continue Sua visita nos ajuda a continuar oferecendo o melhor para você! translate numbers into words ... return $words; }

A saída mostra a secção decimal com alguns números extras anexados no final:

VALUE: 1004712896.17
WHOLE: 1004712896
DECI: 0.16999995708466001004712896

Percebi que os últimos 12 números são a secção inteira do meu valor. Aliás, não é 0,17 uma vez que eu inseri, mas é 0,1699999…

Posso restaurar 17 se multiplicar por 100 e ceil() o resultado, mas ainda assim, os números extras estão presentes no meu resultado:

$deci = ceil(($value - $whole) * 100);

a saída:

DECI: 17001004712896

Portanto… O que eu fiz de incorrecto? Não creio que a razão seja devassidão de memória, pois tentei fechar a aba e reabri-la, e até fechei meu navegador e reabri-lo, Sua visita nos ajuda a continuar oferecendo o melhor para você! problema persiste. E o estouro de memória não é o problema, pois zero mudou mesmo depois de reduzir o valor para a tira de milhares.

Há alguma coisa que devo fazer antes de realizar qualquer operação para evitar isso ou é um bug do PHP?

Usando XAMPP versão 8.0.30 no FireFox (mais recente).

Editar:

tentando outro método, usando a string equivalente ao valor, e logo localize a posição do ponto, e separe as 2 partes em 2 strings, ainda assim, os números extras são anexados à substring, mesmo quando eu disse especificamente que só quero 2 caracteres para minha string decimal:

$valstr = strval($value);
print "
VALSTR: $valstr"; $pos = strpos($valstr, ".", 0); $intstr = substr($valstr, 0, $pos); $decstr = substr($valstr, $pos+1, 2); print "
POS: $pos"; print "
IntStr: $intstr"; print "
DecStr: $decstr";

saída: VALSTR: 8712896.34 POS: 7 IntStr: 8712896 DecStr: 34008712896 // deveria ser unicamente 34

Estou começando a pensar que isso é um bug no PHP …

Tags:

Crédito: Nascente Original

Adriano Pina

Adriano Pina

Análise de Sistemas | SEO e Google Ads | Fundador da Loja Script PHP Aqui & Marca Shoslh de tecnologia

Especialista em transformar ideias em soluções digitais e acelerar o crescimento online.

Deixe um comentário

Tem perguntas? Nos envia sua mensagem 24/7!

(17) 99100-0874

Endereço & Contato

Centro, Interior de São Paulo
E-mail: [email protected]

Links Úteis
BAIXAR APP | SCRIPT PHP AQUI
Certificados
0
    0
    Seu carrinho
    Seu carrinho está vazio

    Usamos cookies para garantir que oferecemos a melhor experiência em nosso site. 

       

    X

    Clique em um de nossos representantes abaixo para conversar no WhatsApp ou envie um email para: 📧 [email protected]

    Precisa de ajuda fale conosco?