153 votes

PHP String to Float

Je ne suis pas du tout familier avec PHP et j'avais une petite question.

J'ai 2 variables pricePerUnit y InvoicedUnits . Voici le code qui définit ces valeurs :

$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);

Si je sors ceci, j'obtiens les valeurs correctes. Disons que 5000 unités facturées et 1.00 pour le prix.

Maintenant, je dois montrer le montant total dépensé. Lorsque je multiplie ces deux montants ensemble, cela ne fonctionne pas (comme prévu, il s'agit de chaînes de caractères).

Mais je n'ai aucune idée de la façon d'analyser, de coder et de convertir les variables en PHP.

Que dois-je faire ?

1voto

Hafenkranich Points 1142

Utilisez cette fonction pour convertir une valeur flottante à partir de tout type de style de texte :

function parseFloat($value) {
    return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,3}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value));
}

Cette solution ne dépend d'aucun paramètre local. Ainsi, les utilisateurs peuvent saisir les valeurs flottantes comme ils le souhaitent. C'est très utile, par exemple, lorsque vous avez un projet qui n'est qu'en anglais mais que des personnes du monde entier l'utilisent et n'ont pas forcément à l'esprit que le projet veut un point au lieu d'une virgule pour les valeurs flottantes. Vous pouvez utiliser javascript et récupérer les paramètres par défaut des navigateurs, mais de nombreuses personnes définissent ces valeurs en anglais et continuent de taper 1,25 au lieu de 1,25 (en particulier, mais sans s'y limiter, dans le secteur de la traduction, de la recherche et de l'informatique).

0voto

Morris Buel Points 98

Je me heurtais à un problème avec la manière standard de procéder :

$string = "one";

$float = (float)$string;

echo $float; : ( Prints 0 )

S'il n'y a pas de nombre valide, l'analyseur ne doit pas renvoyer un nombre, mais une erreur. (C'est une condition que j'essaie d'attraper dans mon code, YMMV)

Pour résoudre ce problème, j'ai fait ce qui suit :

$string = "one";

$float = is_numeric($string) ? (float)$string : null;

echo $float; : ( Prints nothing )

Ensuite, avant de poursuivre le traitement de la conversion, je peux vérifier et renvoyer une erreur si l'analyse syntaxique de la chaîne n'est pas valide.

0voto

JannieT Points 2160

Si vous devez traiter des valeurs qui ne peuvent pas être converties séparément, vous pouvez utiliser cette méthode :

try {
    $valueToUse = trim($stringThatMightBeNumeric) + 0;
} catch (\Throwable $th) {
    // bail here if you need to
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X