ошибка в Perl с префиксом 0 чисел - PullRequest
0 голосов
/ 28 октября 2018

, когда я пытаюсь выполнить следующее (01434.210 instead of 1434.210)

$val=22749.220-(21315.010+01434.210)
print $val

Я получаю эти выходные данные

output 638.207900000001

Но по моему выводу должно быть 0.

Чего мне не хватает?

1 Ответ

0 голосов
/ 28 октября 2018

Ведущий 0 в буквальном числе заставляет Perl интерпретировать значение, которое я являюсь основанием 8:

 123   # 123, in decimal
0123   # 123 in octal, but 83 in decimal

Это не то же самое для строк, преобразованных в числа.В тех Perl игнорирует ведущие 0.Преобразование строки в число имеет дело только с base-10:

 "123" + 0   # 123
"0123" + 0   # still 123

В вашем примере в комментарии вы конвертируете литеральное число в строку с начальным нулем.Когда вы преобразуете эту строку обратно в ее числовую форму, вы получите то же значение, с которого вы начали:

$val=sprintf("%05d",1434);   # converting 1434 to the string "01434"
print $val; print "\n";      # still a string
print $val+21315;            # "01434" + 21315 => 1434 + 21315
print "\n"; 
print 01434+21315;           # oct(1434) + 21315 => 796 + 21315

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

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