Как преобразовать строку в целое число с плавающей запятой внутри perl ha sh? - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в perl, и мне нужна помощь в отладке этой проблемы.

Мой мотив - преобразовать номер строки в целое число с плавающей запятой при создании ha sh.

Я разместил весь свой код и ошибку ниже. Пожалуйста, помогите мне решить эту проблему. Благодарим в будущем.

Пример кода

use strict;
use warnings;

use Data::Dumper;

my $price = 8.5;

my $g={};
$g->{'get'}=sprintf('%.02f',$price);

print Dumper($g);

Текущий выход

$VAR1 = {
          'get' => '8.50'
        };

Ожидаемый результат

$VAR1 = {
          'get' => 8.50
        };

Ответы [ 3 ]

0 голосов
/ 28 мая 2020
use Scalar::Util 'looks_like_number';
.
.
print Dumper($g) =~ s/'(.*?)'/looks_like_number($1)?$1:"'$1'"/ger;

Изменяет вывод Dumper до его печати. Он удаляет оба ' s каждой строки в кавычках, если она выглядит как число согласно Scalar :: Util.

0 голосов
/ 28 мая 2020

Я подозреваю, что вы здесь излишне беспокоитесь. Perl рассматривает строки и числа как в значительной степени взаимозаменяемые и, как правило, правильно поступает с данными любого типа. Сколько раз вам следует позаботиться о том, есть ли у вас строка или число, крошечное.

Фактически, даже если вы явно укажете Perl число в коде, подобное вашему, оно будет отображаться как строка :

$ perl -MData::Dumper -E'say Dumper { get => 8.5 }'
$VAR1 = {
          'get' => '8.5'
        };
0 голосов
/ 28 мая 2020

Несмотря на одинарные кавычки вокруг 8.50 в выводе Dumper, Perl по-прежнему будет рассматривать его как числовое c значение, когда вы go используете его:

use strict;
use warnings;

my $price = 8.5;

my $g={};
$g->{'get'}=sprintf('%.02f',$price);

my $x = 5;
printf "%.02f\n", $x + $g->{get};

Выходы:

13.50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...