Analyser des valeurs monétaires avec précision en PHP
Analyser des données financières avec différents formats peut être un défi, en particulier lorsque l'on considère des séparateurs spécifiques aux paramètres régionaux. Ce problème survient lorsque vous essayez de convertir une représentation sous forme de chaîne d'argent, telle que "75,25 €", en une valeur à virgule flottante.
Bien que l'approche courante implique d'utiliser parsefloat() après avoir remplacé les virgules par des points, cela ne suffit pas lorsqu'il s'agit de paramètres régionaux qui utilisent des virgules comme séparateurs décimaux. Pour remédier à cette limitation, une solution plus complète est nécessaire.
Une solution sensible à la localisation
La solution proposée répond au besoin de sensibilisation à la localisation en s'appuyant sur des expressions régulières pour extraire la valeur numérique de la chaîne d'entrée. Il gère efficacement les virgules et les points comme séparateurs décimaux, préservant la représentation correcte quels que soient les paramètres régionaux.
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); }
Test de la solution
Pour valider son efficacité, le La solution a été testée avec différents formats d'entrée, notamment :
['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]
Les résultats démontrent la capacité de la solution à extraire avec précision des valeurs à virgule flottante, quel que soit le format d'entrée.
Limitations et source
Bien que la solution excelle dans la gestion de divers paramètres régionaux, elle présente une limitation concernant les décimales de plus de deux chiffres. La base de code est disponible sur https://github.com/mcuadros/currency-detector, fournissant une implémentation pratique pour analyser les valeurs monétaires dans divers paramètres régionaux.
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!