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();