Ho un algoritmo che esegue i seguenti calcoli:Nessuna funzione di troncamento in PHP - Opzioni?
- ((0,50 * 0) + 7)/10 = 0,70
- ((0,70 * 10) + 9)/20 = 0,80
- ((0.80 * 20) + 7)/30 = ,7666,666667 millions -> voglio che questo valore per troncare a 0,76
in modo che possa alimentare il resto del calcolo come:
4a. ((0,76 * 30) + 8)/40 = 0,77
E non alimentare quando arrotondata due decimali 0,77:
4b. ((0,77 * 30) + 8)/40 = 0,77
**** Il seguente sembrano aver fallito e forzare un round fino a 0,77: ****
Il PHP sptrinf () funzione: PHP dropping decimals without rounding up
Il number_format PHP() funzione: PHP: show a number to 2 decimal places
Il piano PHP() funzione: Truncate float numbers with PHP
- C'è un altro modo?
- È possibile ottenere ciò che voglio (troncato a due cifre decimali) con PHP?
Si prega di assistere. Grazie molto.
UPDATE - SOLVED Ok, ora funziona grazie a dkamins e zneak. Ho usato l'approccio floor() (presumo che non stavo facendo qualcosa giusto in passato). Tuttavia, ora accade quanto segue:
ad es.
(0,86 * 30) + 9)/40 = 0,87 (dovrebbe), tuttavia dopo TRUNC it = 0.86
Come è troncando 0,87-0,86? Non ha senso. C'è un modo per farlo troncare solo se ci sono più di 2 posizioni decimali?
risolto:
$numDecPlace = strlen(substr(strrchr($newRel, "."), 1));
echo '<p>Test: Number of decimal places=' .$numDecPlace. '</p>';
if($numDecPlace > 2) {
$newRel = floor($newRel * 100)/100; // Truncate to 2dp.
echo '<p>Test: New relationship truncated is $newRel=' .$newRel. '</p>';
}
Risolto il mio aggiornamento. – leokennedy
Dovresti controllare @Fernando Prieto [la sua risposta sotto] (http://stackoverflow.com/a/19124167/1890400). Usa un approccio basato su una stringa (sotto) che è simile alla prima parte della soluzione scelta, ma personalmente penso che potrebbe essere più efficiente e più robusto. – Byson