Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Peço que quem ainda não viu de uma olhada também neste tópico. http://forum.imasters.com.br/topic/429036-in-array-problema-curioso/
Agora o outro problema curioso do PHP (talvêz um bug)
Fiz a seguinte programação:
um campo determinado onde o usuário digita um valor qualquer maior que zero e menor que 999.
Com até 2 casas decimais.
Ao enviar o formulário com esse número, é substituido virgula por ponto, e detectado se o valor digitado é numerico (pois caso seja digitado 2 pontos 12.10.1 ou 12,10,1 deixaria de ser numérico)
Então com o valor já transformado para decimal e sendo numérico tenho eu:
if (intval($_POST['unica']*100) == $_POST['unica']*100) $_POST['unica'] = $_POST['unica'] * 100;
else echo intval($_POST['unica']* 100) . " " . $_POST['unica']*100 . "Valor inválido, o numero de casas decimais não pode ser superior a 2";
Ou seja se o número multiplicado por 100 (para retirar as duas casas decimais) forem iguais a parte inteira do número multiplicado do numero multiplicado por 100 ele retornaria o resultado como sucesso!
Deixa eu exemplificar pra entenderem melhor.
Se eu digitei o numero 10,1
O sistema substituirá a virgula pelo ponto ficando 10.1 se tornando numérico e o multiplicaria por 100 ficando 1010 ficando um nmero inteiro.
E compararia com o valor inteiro dele multiplicado por 100, ou seja, a parte inteira do valor 1010.
Sendo iguais não retornaria erro.
Mas caso o usuário digitasse 10,111
Substituiria a virgula por . ficando 10.111 se tornando numerico e o multiplicaria por 100 ficando 1011.1 sendo assim esse número real com 1 casa decimal.
E compararia o valor inteiro dele multiplicado por 100, ou seja, a parte inteira do valor 1011.1 que seria 1011.
Como os valores seriam difierente 1011.1 e 1011 o sistema retornaria erro.
para os numeros maiores que 1 ( 2, 3, 4, ... 999) funciona NORMAL e perfeitamente.
Mas para os números reais de 1 não funciona sempre retorna erro;
O código segue aqui:
<?php
$numero = "1,1";
$numero = str_replace(",",".",$numero);
if (is_numeric($numero))
{
if (intval($numero 100) == $numero 100)
{
echo intval($numero 100) . ":" . $numero 100 . "<br/>"; //Exibirá a comparação como 110:110 (iguais)
echo "Numero cadastrado com sucesso";
}
else
{
echo intval($numero 100) . ":" . $numero 100 . "<br/>"; //Exibirá a comparação como 110:110 (iguais)
echo "O numero deve conter no máximo 2 casas decimais";
}
}
else
{
echo "O número digitado deve conter no máximo duas casas decimais e não pode conter caracteres que não sejam número , ou .";
}
?>
Saída:
110:110
O numero deve conter no máximo 2 casas decimais
Tentando o mesmo código com o número 2,1 teremos:
<?php
$numero = "2,1";
$numero = str_replace(",",".",$numero);
if (is_numeric($numero))
{
if (intval($numero 100) == $numero 100)
{
echo intval($numero 100) . ":" . $numero 100 . "<br/>"; //Exibirá a comparação como 210:210 (iguais)
echo "Numero cadastrado com sucesso";
}
else
{
echo intval($numero 100) . ":" . $numero 100 . "<br/>"; //Exibirá a comparação como 210:210 (iguais)
echo "O numero deve conter no máximo 2 casas decimais";
}
}
else
{
echo "O número digitado deve conter no máximo duas casas decimais e não pode conter caracteres que não sejam número , ou .";
}
?>
Saída:
210:210
Numero cadastrado com sucesso
Carregando comentários...