Ma motivation est de convertir le numéro de chaîne en nombre à virgule flottante tout en créant un hachage.
J'ai placé tout mon code et mon erreur ci-dessous. Aidez-moi à résoudre ce problème.
Exemple de code
$VAR1 = { 'get' => 8.50 };
Sortie actuelle p>
$VAR1 = { 'get' => '8.50' };
Résultat attendu
use strict; use warnings; use Data::Dumper; my $price = 8.5; my $g={}; $g->{'get'}=sprintf('%.02f',$price); print Dumper($g);
3 Réponses :
Malgré les guillemets simples autour de 8,50
dans la sortie de Dumper
, Perl le traitera toujours comme une valeur numérique lorsque vous l'utiliserez:
13.50
use Scalar::Util 'looks_like_number'; . . print Dumper($g) =~ s/'(.*?)'/looks_like_number($1)?$1:"'$1'"/ger; Which changes the output from Dumper before it's printed. It removes both 's of every single quoted string if it looks like a number according to Scalar::Util.
Je soupçonne que vous vous inquiétez inutilement ici. Perl traite les chaînes et les nombres comme largement interchangeables et fera généralement ce qu'il faut avec les données de l'un ou l'autre type. Le nombre de fois où vous devriez vous soucier si vous avez une chaîne ou un nombre est minuscule.
En fait, même si vous donnez explicitement à Perl un nombre comme le vôtre, il sera affiché sous forme de chaîne:
$ perl -MData::Dumper -E'say Dumper { get => 8.5 }' $VAR1 = { 'get' => '8.5' };
Je crée dynamiquement ce hachage et je l'ai envoyé à une autre application Rest-API, où cette valeur doit être un entier
@DeepakRaj: s'il doit être un entier, pourquoi votre exemple utilise-t-il un nombre à virgule flottante? Avec quel format appelez-vous l'API? Est-ce JSON? Votre problème n'est pas là, c'est avec le JSON qui est en cours de création. Veuillez fermer cette question et en créer une nouvelle.
«Entier à virgule flottante» est un peu déroutant puisque les nombres sont soit en virgule flottante, soit en nombre entier. On pourrait peut-être dire que
3.0
est une telle bête, mais quand il s'agit de programmation, les nombres sont stockés et exploités soit comme des virgules flottantes, soit comme des entiers. Ou sous forme de chaînes même puisque le sujet est perl. Beaucoup sinon tous les langages dynamiques (perl inclus) peuvent traiter les chaînes comme des nombres si elles ressemblent à un nombre:perl -le 'print "44.2" + "-.342e1"'
=>40.78