Bagaimana untuk Memperhalusi Nilai Wang Tidak Berformat dalam PHP?

Mary-Kate Olsen
Lepaskan: 2024-11-23 22:28:16
asal
543 orang telah melayarinya

How to Refine Unformatted Money Values in PHP?

Memperhalusi Nilai Wang Tidak Berformat dalam PHP

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);
}
Salin selepas log masuk

Penyelesaian ini terdiri daripada beberapa langkah:

  • Sanitasi: Rentetan input dibersihkan terlebih dahulu dengan mengalih keluar sebarang aksara bukan angka.
  • Pemisah Kira: Kemudian mengira bilangan pemisah perpuluhan (koma atau noktah) yang terdapat dalam sanitasi rentetan.
  • Menghuraikan: Menggunakan ungkapan biasa, pemisah dialih keluar, hanya meninggalkan bahagian berangka rentetan.
  • Penukaran: Akhirnya, rentetan yang telah dibersihkan ditukar kepada nombor titik terapung.

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]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan