Maison > développement back-end > tutoriel php > Comment analyser les valeurs monétaires avec précision en PHP : une approche basée sur la localisation ?

Comment analyser les valeurs monétaires avec précision en PHP : une approche basée sur la localisation ?

Susan Sarandon
Libérer: 2024-11-13 17:11:02
original
323 Les gens l'ont consulté

How to Parse Monetary Values with Precision in PHP: A Localization-Aware Approach?

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);
}
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal