Из http://perldoc.perl.org/perlnumber.html:
Perl может внутренне представлять числа тремя различными способами: как собственные целые числа, как собственные числа с плавающей запятой и как десятичные строки. Десятичные строки могут иметь экспоненциальную часть записи, как в «12.34e-56». Native здесь означает «формат, поддерживаемый компилятором C, который использовался для сборки Perl».
Это означает, что печать числа зависит от того, как число хранится внутри perl, что, в свою очередь, означает, что вы должны знать, как число представлено на входе.
По большому счету, Perl будет делать правильные вещи, но вы должны знать, как использовался какой компилятор, как он представляет числа внутри и как эти числа выводить на печать. Например:
$ perldoc -f int
int EXPR
int Returns the integer portion of EXPR. If EXPR is omitted, uses $_. You should
not use this function for rounding: one because it truncates towards 0, and two
because machine representations of floating-point numbers can sometimes produce
counterintuitive results. For example, "int(-6.725/0.025)" produces -268 rather than
the correct -269; that's because it's really more like -268.99999999999994315658
instead. Usually, the "sprintf", "printf", or the "POSIX::floor" and
"POSIX::ceil" functions will serve you better than will int().
Я думаю, что если вы хотите явно прочитать число в виде строки, лучше всего использовать unpack() с форматом «A *».
person
Barton Chittenden
schedule
23.04.2012