Perl странное поведение числа с десятичной точкой - PullRequest
4 голосов
/ 30 мая 2020

Итак, я писал программу perl для выполнения некоторых вычислений, и я поместил число с плавающей запятой как

$x = 00.05;

, если я напечатаю

print $x * 100.0;

Он возвращает 500.0

Но если я это сделаю

$x = 0.05; print $x * 100.0;

, он напечатает правильно 5.0;

Что это поведение? Есть ли какая-то конвенция, которую я должен соблюдать, но которой мне не хватает?

1 Ответ

10 голосов
/ 30 мая 2020

Начальный ноль означает восьмеричную константу, поэтому, когда вы выполняете

my $x = 00.05;

, вы фактически выполняете конкатенацию строк двух восьмеричных чисел:

my $x = 00 . 05; # The same as "0" . "5"

, что дает вам строку "05" и позже вы сделаете

print $x * 100.0;  # prints 500

, поскольку perl интерпретируется как "05" как число 5

...