Menghuraikan Nilai Monetari dengan Ketepatan dalam PHP
Menghuraikan data kewangan dengan pelbagai format boleh menjadi satu cabaran, terutamanya apabila mempertimbangkan pemisah khusus setempat. Isu ini timbul apabila cuba menukar perwakilan rentetan wang, seperti "75,25 €", kepada nilai titik terapung.
Walaupun pendekatan biasa melibatkan penggunaan parsefloat() selepas menggantikan koma dengan titik, ia gagal apabila berurusan dengan tempat yang menggunakan koma sebagai pemisah perpuluhan. Untuk menangani had ini, penyelesaian yang lebih komprehensif diperlukan.
Penyelesaian Penyetempatan-Sedar
Penyelesaian yang dicadangkan menangani keperluan untuk kesedaran penyetempatan dengan bergantung pada ungkapan biasa untuk ekstrak nilai berangka daripada rentetan input. Ia mengendalikan kedua-dua koma dan titik secara berkesan sebagai pemisah perpuluhan, mengekalkan perwakilan yang betul tanpa mengira tempat.
public function getAmount($money) { $cleanString = preg_replace('/([^0-9\.,])/i', '', $money); $onlyNumbersString = preg_replace('/([^0-9])/i', '', $money); $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1; $stringWithCommaOrDot = preg_replace('/([,\.])/', '', $cleanString, $separatorsCountToBeErased); $removedThousandSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/', '', $stringWithCommaOrDot); return (float) str_replace(',', '.', $removedThousandSeparator); }
Menguji Penyelesaian
Untuk mengesahkan keberkesanannya, penyelesaian telah diuji dengan pelbagai format input, termasuk:
['1,10 USD', 1.10], ['1 000 000.00', 1000000.0], [' 000 000.21', 1000000.21], ['£1.10', 1.10], ['3 456 789', 123456789.0], ['3,456,789.12', 123456789.12], ['3 456 789,12', 123456789.12], ['1.10', 1.1], [',,,,.10', .1], ['1.000', 1000.0], ['1,000', 1000.0]
Hasilnya menunjukkan keupayaan penyelesaian untuk mengekstrak nilai titik terapung dengan tepat, tanpa mengira format input.
Penghadan dan Sumber
Walaupun penyelesaiannya cemerlang dalam mengendalikan pelbagai tempat, ia mempunyai had mengenai perpuluhan dengan lebih daripada dua digit. Pangkalan kod tersedia di https://github.com/mcuadros/currency-detector, menyediakan pelaksanaan praktikal untuk menghuraikan nilai kewangan dalam pelbagai tempat.
Atas ialah kandungan terperinci Bagaimana Menghuraikan Nilai Monetari dengan Ketepatan dalam PHP: Pendekatan Sedar Penyetempatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!