← Voltar para 3. Decimais & Financeiros
3. Decimais & Financeiros

FLOAT / DOUBLE (Ponto Flutuante)

Números científicos aproximados de alta velocidade para sensores, física, estatística e telemetria.

💾 Espaço em Disco: FLOAT: 4 Bytes | DOUBLE: 8 Bytes 📏 Limites: FLOAT: ~7 dígitos de precisão | DOUBLE: ~15-17 dígitos de precisão

FLOAT (precisão simples, 4 bytes) e DOUBLE (precisão dupla, 8 bytes) utilizam o padrão IEEE 754 de ponto flutuante binário. São processados diretamente pela unidade de ponto flutuante (FPU) do processador com extrema velocidade, mas são valores APROXIMADOS.

✅ Quando Usar

  • •Medições de sensores IoT (temperatura ambiente, umidade do ar, pressão atmosférica, velocidade do vento).
  • •Métricas estatísticas aproximadas, pesos de algoritmos de Machine Learning ou gráficos científicos.

🚫 Quando NÃO Usar

  • •PROIBIDO para valores financeiros, contábeis, preços ou saldos bancários (use `DECIMAL`).
  • •Evite fazer `WHERE valor_float = 19.99` em SQL, pois a representação binária interna pode ser `19.989999771118164`.

📐 Configuração no DrawDB

Type:
DOUBLE (ou FLOAT / REAL)
Size / Values:
Vazio (a sintaxe FLOAT(M,D) foi depreciada no MySQL 8)
Default:
0
MySQL / MariaDB
DOUBLE ou FLOAT
PostgreSQL
DOUBLE PRECISION ou REAL
SQLite
REAL
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE leituras_sensor (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor_id INT UNSIGNED NOT NULL,
    temperatura_celsius FLOAT NOT NULL,
    umidade_relativa FLOAT NOT NULL,
    lido_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);

$temperatura = filter_var('24.65', FILTER_VALIDATE_FLOAT);
if ($temperatura === false) {
    throw new InvalidArgumentException('Temperatura inválida.');
}

$stmt = $pdo->prepare('
    INSERT INTO leituras_sensor (sensor_id, temperatura_celsius, umidade_relativa)
    VALUES (:sensor_id, :temp, :umidade)
');
$stmt->bindValue(':sensor_id', 1, PDO::PARAM_INT);
$stmt->bindValue(':temp', (string) $temperatura, PDO::PARAM_STR);
$stmt->bindValue(':umidade', '62.5', PDO::PARAM_STR);
$stmt->execute();