Maison >développement back-end >tutoriel php >Comment affiner les valeurs monétaires non formatées en PHP ?

Comment affiner les valeurs monétaires non formatées en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-23 22:28:16590parcourir

How to Refine Unformatted Money Values in PHP?

Affinage de 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 :

  • Sanitization : La chaîne d'entrée est d'abord nettoyée en supprimant tous les caractères non numériques.
  • Count Separators : Elle est ensuite compte le nombre de séparateurs décimaux (virgules ou points) présents dans le string.
  • Parse : À l'aide d'expressions régulières, les séparateurs sont supprimés, ne laissant que la partie numérique de la chaîne.
  • Conversion : Enfin, la chaîne nettoyée est convertie en nombre à virgule flottante.

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!

Déclaration:
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