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