1
votes

Comment convertir une chaîne en nombre à virgule flottante dans un hachage Perl?

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);


1 commentaires

«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


3 Réponses :


1
votes

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


0 commentaires

1
votes
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.

0 commentaires

1
votes

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'
        };


2 commentaires

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.