Maison >développement back-end >tutoriel php >Comment affiner les valeurs monétaires non formatées en PHP ?
Lors de l'analyse de données financières en PHP, il est souvent nécessaire de convertir des chaînes représentant des valeurs monétaires en nombres à virgule flottante. Pour y parvenir, une approche courante consiste à remplacer les virgules par des points dans la chaîne, puis à utiliser la fonction floatval(). Cependant, cette méthode repose sur un séparateur décimal fixe (point) et peut ne pas convenir aux paramètres régionaux où une virgule est utilisée comme séparateur.
Une solution plus robuste qui gère les deux séparateurs décimaux est présentée dans le code suivant :
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); }
Cette solution se compose de plusieurs étapes :
Cette approche garantit que les valeurs monétaires non formatées sont analysées correctement, quel que soit le séparateur décimal spécifique aux paramètres régionaux. Cependant, il est important de noter que cela suppose que la partie décimale de la valeur monétaire ne comporte pas plus de deux chiffres.
Exemples de tests :
['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]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!