Sono stato sconcertante su come gestire la visualizzazione della valuta e la matematica in PHP, e per lungo tempo lo ho archiviato in MySQL usando il tipo DECIMAL
e usando money_format()
per formattarlo per la visualizzazione sulla pagina web. Tuttavia, oggi ho esaminato il prototipo attuale:Se avere a che fare con soldi in un float è sbagliato, allora perché money_format() lo fa?
string money_format (string $format , float $number)
Sono un po 'confuso ora. Tutto quello che mi è stato detto è di evitare i galleggianti per soldi! Ma eccola qui, la fondamentale funzione di formattazione (diciamo che cinque volte veloce), trasmettendo l'input a un float. number_format()
fa lo stesso.
Quindi le mie domande sono:
A meno che non ho a che fare con i centesimi frazionali o bilioni di dollari (e ho a che fare con nessuno dei due), dovrei essere preoccupato per tutto su visualizzazione e memorizzando la valuta (ma mai in matematica) che è stata lanciata su un float? Mi avvicinerò mai all'area in cui le imprecisioni in virgola mobile cambiano le mie cifre?
Se la risposta a 1 # è che dovrei davvero interessati, allora perché è
money_format()
costruito in questo modo?
La maggior parte del INT> conversione galleggiante pericolo viene da allora fa per la matematica con i carri allegorici. 'number_format()' sta semplicemente facendo una conversione di tipo "pretty print", quindi è improbabile che i decimali a ripetizione strana creati dal processo di float-ification influenzino i risultati. –
PHP non è l'epitome delle "migliori pratiche". – Gabe
cosa ha detto @markb. – time4tea