2012-02-06 21 views
6

Speriamo solo una breve domanda. Ho una colonna DECIMAL nel mio database. Il valore è una frazione decimale molto piccola - sommando questo valore per tutte le righe sarebbe uguale a 1.Come deve essere utilizzato il tipo di dati MySQL Decimal in php?

Ora mi piacerebbe utilizzare questo valore nella mia applicazione php, visualizzarlo, eseguire calcoli su di esso e salvarlo di nuovo Banca dati.

Come php ha solo i tipi integer e float, qual è il modo migliore per utilizzare tale valore in php in modo da non perdere precisione nei calcoli o nella visualizzazione?

  • mantenere il valore come una stringa e utilizzare aC matematica per i calcoli
  • esprimere il numero come float - So carri php sono precisi ad un buon numero (a seconda del sistema operativo)
  • convertire il valore in un numero intero che utilizza una funzione che ricorda l'esponente
  • Qualcos'altro?

Grazie

+0

Mantenerlo come una stringa manterrebbe l'accuratezza, ma una volta che si inizia a fare matematica su di esso, tutte le scommesse sono disattivate. –

+3

Vorrei usare [BC Math] (http://www.php.net/manual/en/intro.bc.php) –

risposta

0

Si dovrebbe andare per float per non perdere precisione nel calcolo e utilizzare number_format uscita per la visualizzazione ...

Note:
E 'davvero dipende vostre esigenze e come vuoi che il tuo output sia gestito, se vuoi semplicemente tagliare la mantissa dopo il secondo numero o fare qualche tipo di arrotondamento.

Con l'utilizzo di BC Math sulla bilancia 2 per esempio 2.10/1.10 producono 1.90 mentre usando number_format(2.10/1.10, 2) comporterà 1.91 (arrotondamento i risultati come SELECT CAST(2.10/1.10 as DECIMAL(10,2)))

Aggiornamento:. Come indicato nei commenti, ci possono essere casi in cui perderai precisione nei calcoli. Probabilmente sarà meglio eseguire calcoli di precisione arbitraria in MySQL stesso in modo da poter essere sicuri che nulla venga sciolto durante le operazioni matematiche.

+0

Qualche spiegazione come perché e cosa potrebbe accadere, quali sono i pro ei contro? –

+1

Se @Bendos vuole eseguire l'aritmetica con precisione arbitraria, usare i numeri a virgola mobile non è una buona idea. La precisione andrà persa se una fase del calcolo coinvolge un numero che non può essere rappresentato nel formato a virgola mobile. – Hammerite

+0

@ Hammerite, grazie. Ho aggiornato la mia risposta per prendere nota di questo –

Problemi correlati