Comment analyser avec précision les valeurs monétaires à partir de chaînes dans divers paramètres régionaux ?

DDD
Libérer: 2024-11-14 15:01:02
original
647 Les gens l'ont consulté

How to Accurately Parse Monetary Values from Strings in Various Locales?

Déformatage précis des valeurs monétaires dans divers paramètres régionaux

La gestion des valeurs monétaires nécessite souvent la conversion de chaînes représentant des montants monétaires en quantités numériques. En PHP, la fonction parsefloat() peut être utilisée pour y parvenir. Cependant, lorsqu'il s'agit de valeurs qui peuvent varier en fonction des paramètres régionaux, le séparateur décimal peut différer. Cela pose un défi pour l'approche simple parsefloat(str_replace(',', '.', $var)).

Une solution complète

Pour répondre à ces paramètres régionaux -problème dépendant, considérons la solution suivante, qui extrait efficacement la valeur flottante tout en tenant compte des différents séparateurs décimaux et des milliers séparateurs :

public function getAmount($money)
{
    $cleanString = preg_replace('/([^0-9\.,])/i', '', $money); // Remove non-numeric characters
    $onlyNumbersString = preg_replace('/([^0-9])/i', '', $money); // Extract only numbers

    $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1; // Determine extra separators

    $stringWithCommaOrDot = preg_replace('/([,\.])/i', '', $cleanString, $separatorsCountToBeErased); // Replace separators
    $removedThousandSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/i', '',  $stringWithCommaOrDot); // Remove excess thousand separators

    return (float) str_replace(',', '.', $removedThousandSeparator); // Convert to float with dot as decimal separator
}
Copier après la connexion

Avantages et mises en garde

Cette solution fournit un moyen fiable d'extraire les valeurs flottantes des chaînes monétaires dans divers paramètres régionaux. Des tests approfondis ont validé sa précision pour un large éventail de scénarios, y compris des valeurs avec des virgules ou des points comme séparateurs décimaux et des séparateurs de milliers.

Cependant, la mise en garde réside dans son échec potentiel lorsqu'il s'agit de parties décimales dépassant deux chiffres. Pour remédier à cette limitation, modifiez le modèle d'expression régulière dans le code en conséquence.

Mise en œuvre pratique

La solution est déployée au sein de la bibliothèque sur https://github.com /mcuadros/currency-detector, spécialisé dans l'identification et le traitement des valeurs monétaires en fonction de paramètres spécifiques aux 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal