+3

O tipo Float

criado por Rubens Takiguti Ribeiro em 11/01/2010 10:01pm
Representação de Números Reais

Representação Convencional
O tipo real, em função de sua aplicação prática, normalmente é representado na forma decimal e semelhante à representação de um inteiro. A diferença é que no caso de um número real é utilizado o símbolo "." (ponto final) para separar os digitos do valor inteiro dos dígitos do valor das casas decimais. Alguns exemplos a seguir:

$f = 0.0;
$f = 1.0;
$f = 0.1;
$f = 0.0455;
$f = 123.0838;
$f = -239.134;

Observação: é possível omitir um dos lados do ponto. Caso o valor inteiro seja omitido, ele é considerado zero. Caso as casas decimais sejam omitidas, são consideradas como zero. Alguns exemplos a seguir:

$f = .2;  // $f = 0.2;
$f = 2.;  // $f = 2.0;
$f = -.3; // $f = -0.3;
$f = -3.; // $f = -3.0;

Representação em Octal ou Hexadecimal (casos especiais)

Em PHP, quando um valor numérico ultrapassa o maior inteiro permitido (ele pode ser descoberto verificando o valor da constante PHP_INT_MAX), ele é automaticamente considerado um número real. Portanto, é possível criar um número real através da notação octal ou hexadecimal, mas é preciso que o valor seja superior a PHP_INT_MAX, conforme o exemplo:

$f = 0xFFFFFFFF; // $f = 4294967295.0;

Representação com expoente de 10
PHP oferece, ainda, uma forma de representar valores reais através de uma notação com expoente 10. Para isso, é incluído um sufixo em uma representação de número real (com notação decimal). Este sufixo é formado pela letra "e" (sem as aspas e insensível a caixa) seguido por um número inteiro positivo ou negativo, que indica o valor do expoente de 10. Esta notação é util para representar valores muito altos, muito baixos ou muito próximos de zero (tanto negativos quanto positivos). Veja alguns exemplos:

$f = 5e3;  // 5 * 10^3 = 5 * 1000 = 5000
$f = -5E3; // -5 * 10^3 = -5 * 1000 = -5000
$f = 5e-3; // 5 * 10^-3 = 5 * (1 / 10^3) = 5 * (1 / 1000) = 5 * 0,001 = 0,005
$f = -5e-3; // -5 * 10^-3 = -5 * (1 / 10^3) = -5 * (1 / 1000) = -5 * 0,001 = -0,005

Comentários:

Mostrando 1 - 4 de 4 comentários
Amigos...eu tô ralando pra tentar entender o raciocínio abaixo mas não consigo:

$x=14 ou 1110
$y=12 ou 1100

RESULTADOS
EXPRESSÃO BASE 2 BASE 10
~$x 0001 1 (Não entendi porque deu 1)
$x&$y 1100 12 (Não entendi porque deu 12)
$x|$y 1110 14 (Não entendi porque deu 14)
$x^$y 0010 2 (Não entendi porque deu 2)
$x>>2 0011 3 (Não entendi porque deu 3)
$x<<2 111000 56 (Não entendi porque deu 56)

Alguém pode me ajudar?
03/11/2012 4:33pm (~12 anos atrás)

Excelente artigo. Muito obrigado!
26/04/2010 4:28pm (~14 anos atrás)

Marcos Regis disse:
Artigo muito didático. Excelente para iniciantes em programação entenderem sobre os tipos primitivos da linguagem.

Complementando as infos:
O tamanho máximo de um número de ponto flutuante é dependente de plataforma (S.0. e arquitetura), sendo o máximo de 1.8e308 com uma precisão de 14 decimais (número de 64 bits no formato IEEE).
Isto o torna quase que obrigatório quando se trabalha com números inteiros muito grandes.
Por exemplo, alguns desenvolvedores utilizam um campo Inteiro do MySQL para armazenar CNPJ (eu não aconselho) porém ele ultrapassa o maior valor para o Inteiro no PHP em sistemas de 32 bits. Nesse caso o Float pose ser usado tranquilamente pois seu limite é superior.
  echo sprintf("%f",99999999999999 + 9);
Notem que é extremamente importante estar ciente dos problemas de precisão, como foi salientado, principalmente para sistema que calculem taxa de juros por exemplo.
Além da extensão BC (que no Windows é ativada por padrão mas precisa ser ativada no Linux) tem também a extensão GMP que usa a biblioteca GNU MP. Esta última precisa ser ativada tanto em Windos quanto em Linux.
08/03/2010 2:49pm (~14 anos atrás)

Muito bom artigo. Mostra como é importante conhecermos a fundo a linguagem PHP afim de desenvolvermos aplicações consistentes. A conversão automática de um tipo de variável para outro pode ocasionar erros de cálculos difíceis de identificar. Ficar a par destes detalhes nos ajuda a desenvolver com mais qualidade.

18/01/2010 9:19pm (~15 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)