Heim >Backend-Entwicklung >PHP-Tutorial >Wie verfeinert man unformatierte Geldwerte in PHP?

Wie verfeinert man unformatierte Geldwerte in PHP?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-23 22:28:16591Durchsuche

How to Refine Unformatted Money Values in PHP?

Verfeinerung unformatierter Geldwerte in PHP

Beim Parsen von Finanzdaten in PHP ist es häufig erforderlich, Zeichenfolgen, die Geldwerte darstellen, in Gleitkommazahlen umzuwandeln. Um dies zu erreichen, besteht ein gängiger Ansatz darin, Kommas durch Punkte in der Zeichenfolge zu ersetzen und dann die Funktion floatval() zu verwenden. Diese Methode basiert jedoch auf einem festen Dezimaltrennzeichen (Punkt) und ist möglicherweise nicht für Länder geeignet, in denen ein Komma als Trennzeichen verwendet wird.

Eine robustere Lösung, die beide Dezimaltrennzeichen verarbeitet, wird im folgenden Code vorgestellt :

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

Diese Lösung besteht aus mehreren Schritte:

  • Bereinigung: Die Eingabezeichenfolge wird zunächst bereinigt, indem alle nicht numerischen Zeichen entfernt werden.
  • Trennzeichen zählen: Anschließend wird die Eingabezeichenfolge bereinigt zählt die Anzahl der Dezimaltrennzeichen (Kommas oder Punkte), die in der bereinigten Datei vorhanden sind Zeichenfolge.
  • Parsen: Bei Verwendung regulärer Ausdrücke werden die Trennzeichen entfernt, so dass nur der numerische Teil der Zeichenfolge übrig bleibt.
  • Konvertierung: Schließlich Die bereinigte Zeichenfolge wird in eine Gleitkommazahl umgewandelt.

Dieser Ansatz stellt sicher, dass unformatierte Geldwerte analysiert werden korrekt, unabhängig vom gebietsschemaspezifischen Dezimaltrennzeichen. Es ist jedoch wichtig zu beachten, dass davon ausgegangen wird, dass der Dezimalteil des Geldwerts nicht mehr als zwei Ziffern hat.

Beispieltests:

['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]

Das obige ist der detaillierte Inhalt vonWie verfeinert man unformatierte Geldwerte in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn