Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Memperhalusi Nilai Wang Tidak Berformat dalam PHP?

Bagaimana untuk Memperhalusi Nilai Wang Tidak Berformat dalam PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-23 22:28:16591semak imbas

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);
}

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]

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!

Kenyataan:
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