Apabila menghuraikan data kewangan dalam PHP, selalunya perlu menukar rentetan yang mewakili nilai kewangan kepada nombor titik terapung. Untuk mencapai matlamat ini, pendekatan biasa melibatkan menggantikan koma dengan noktah dalam rentetan dan kemudian menggunakan fungsi floatval(). Walau bagaimanapun, kaedah ini bergantung pada pemisah perpuluhan tetap (tempoh) dan mungkin tidak sesuai untuk tempat tempat koma digunakan sebagai pemisah.
Penyelesaian yang lebih mantap yang mengendalikan kedua-dua pemisah perpuluhan dibentangkan dalam kod berikut :
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); }
Penyelesaian ini terdiri daripada beberapa langkah:
Pendekatan ini memastikan bahawa tidak diformatkan nilai kewangan dihuraikan dengan betul, tanpa mengira pemisah perpuluhan khusus setempat. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ia menganggap bahagian perpuluhan nilai wang tidak mempunyai lebih daripada dua digit.
Contoh Ujian:
['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]
Atas ialah kandungan terperinci Bagaimana untuk Memperhalusi Nilai Wang Tidak Berformat dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!