Ad esempio, ho questa linea di codice:Aggiunta di un numero intero di un galleggiante in PHP arrotonda il galleggiante 1 cifra
echo 10359023529 + 0.2137582935;
Perché questo ritorno:
10359023529,2
invece di:
10359023529.2137582935
Ad esempio, ho questa linea di codice:Aggiunta di un numero intero di un galleggiante in PHP arrotonda il galleggiante 1 cifra
echo 10359023529 + 0.2137582935;
Perché questo ritorno:
10359023529,2
invece di:
10359023529.2137582935
Usa: bcadd()
echo bcadd(10359023529, 0.2137582935, 10);
Questa è la limitazione di un valore in virgola mobile. Un valore in virgola mobile è memorizzato come coefficiente ed esponente. Avrai molta precisione con numeri piccoli e bassa precisione con numeri alti. Ecco più dettagli di quelli desiderati: http://en.wikipedia.org/wiki/IEEE_754-2008
Linea inferiore: i valori alti saranno molto imprecisi. Prova a utilizzare un intervallo di valori limitato.
Ecco di più sul punto di precisione floating specificamente per quanto riguarda PHP: http://php.net/manual/en/language.types.float.php
Se davvero bisogno di alta precisione e un numero elevato, guarda aC matematica (http://www.php.net/manual/en/ref.bc.php) e GMP (http://www.php.net/manual/en/ref.gmp.php).
C'è un'opzione oscuro php.ini
che definisce il numero di cifre significative per mostrare quando si stampano i numeri in virgola mobile. Nel mio caso si presenta come segue
; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 14
Naturalmente questo occupa solo di formattazione, non il fatto fondamentale che numeri in virgola mobile sono intrinsecamente imprecise. Secondo IEEE 754 la precisione del doppio è di 15,95 cifre decimali.
La precisione dell'output non è il problema; il tipo di dati float è solo così preciso. – meagar
In linea di principio hai ragione, ma in questo caso particolare non ha superato la doppia precisione. –
@Adam credo che l'abbia fatto, in realtà; altrimenti la sua attuazione è stata specificamente previsto per mostrare un solo decimale quando vengono emessi numeri in virgola mobile, come default è 14. – meagar
ci sono una o più impostazioni del php.ini che stabiliscono il numero di cifre da stampare. Non sono sicuro di quali. – erisco