Domanda

provo a memorizzare il valore in virgola mobile PHP 63,59072952118762 in una colonna doppia precisione in postgres. Postgres memorizza il valore come 63,59,073 mila. Qualcuno sa perché? 8 byte dovrebbe essere più che sufficiente per tale valore. Ho provato con il tipo di dati numerici, che funziona quando si specifica la precisione, ma che non dovrebbe essere realmente necessario.

Aggiornamento:. Lo stesso problema è presente quando si cerca di memorizzare 63,5,907295 millions, quindi il suggerimento che succede qualcosa con il doppio prima che sia sempre conservato sembra realistica

Aggiornamento II (in parte risolto) : La linea in cui assegno il doppio parametro è simile al seguente:

$stmt->bindParam(4, $this->latitude);

La cosa che non sapevo è che le impostazioni predefinite DOP suo tipo param a stringa. Ho cambiato in PDO :: PARAM INT in mancanza di un'alternativa migliore (PARAM DOPPIA non era un'opzione), e ha ottenuto 10 cifre di precisione nel doppio memorizzato in postgres (alcuni progressi, almeno). Ho controllato che il tipo numerico funziona bene, così sembra che numerico è la strada da percorrere quando si utilizzano prodotti DOP e doppie che deve avere una precisione di oltre 10 decimali.

In ogni modo, come qualcuno ha detto, non so se è un must per me avere questo tipo di precisione, ma penso che il problema in sé merita di essere indagato.

È stato utile?

Soluzione

  • Come si fa a determinare ciò che PostgreSQL è la memorizzazione?
  • Come si fa a inviare i dati di PostgreSQL?
  • Come si fa a ottenere i dati di nuovo?
  • Come si fa a visualizzarla?
  • Che tipo è la colonna nel database?

Ci sono molti, molti posti sul percorso tra PHP e PostgreSQL, dove ci potrebbe essere confusione su come rappresentare i dati.


E 'importante spiegare come i dati viene inserito nel DBMS. Utilizzando un valore letterale nell'istruzione INSERT porta ad un diverso insieme di problemi da utilizzando parametri legati. Se hai scritto il valore nel SQL:

INSERT INTO SomeTable(SomeColumn) VALUES(63.xxxxxxxxx);

ed i dati sono stati troncati, si avrebbe un problema verso il basso in PostgreSQL. Se si associa la variabile, bisogna essere sicuri di capire quali sono i moduli DOP PostgreSQL PHP e che fare con il valore - è ha inviato come un doppio, o come una stringa, e che si occupa di codice con la conversione, e così via <. / p>

Si esegue in problemi analoghi con Perl DBI + + DBD :: YourDBMS (DBD :: Pg nel tuo caso).

Altri suggerimenti

Si consiglia di utilizzare la DECIMALE / NUMERICO tipo se avete bisogno che molta precisione

PostgreSQL accetta galleggiante (1) a galleggiante (24) selezionando il tipo reale, mentre galleggiante (25) a galleggiante (53) per selezionare doppia precisione.

In più piattaforme PG, il tipo reale ha un intervallo di almeno 1E-37 a 1E + 37 con una precisione di almeno 6 cifre decimali. Tipo a doppia precisione tipicamente ha una gamma di circa 1E-307 a 1E + 308 con una precisione di almeno 15 cifre ( REF )

Quale usi?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top