2

我正在用 Perl 编写一个需要长数据类型而不是整数的应用程序。我怎样才能做到这一点。例如;

my $num = sprintf('%ld', 27823221234);

print $num;

输出不是长整数,而是整数。

4

4 回答 4

12

您的选择是:

更新: 啊,你也可以使用浮点数而不是整数:

printf("%.0f", 2**50)

IIRC,在大多数当前架构上,浮点数可以精确地表示高达 2**54-1 的整数。

于 2011-01-24T16:50:43.870 回答
1

在您的情况下, 27823221234 实际上表示为双精度,因此当您尝试输入到 sprintf 时,您会收到 -1

my $x = 27823221234;

my $num = sprintf('%lf', $x);

print $num, "\n";

屈服于

27823221234.000000

如果您想对大整数进行数学运算,请考虑使用 Math::Bigint 模块。

于 2011-01-24T16:45:06.217 回答
1

你可能很困惑。Perl 本身支持“长”大小的整数数学,但我不认为它的内部表示是你的问题所在。你期望你的输出是什么样的?

于 2011-01-24T16:47:04.610 回答
1

这是一些说明 Perl 行为方式的代码 - 源自您的示例:

use strict;
use warnings;

my $num = sprintf("%ld", 27823221234);
print "$num\n";

my $val = 27823221234;
my $str = sprintf("%ld", $val);
printf "%d = %ld = %f = %s\n", $val, $val, $val, $val;
printf "%d = %ld = %f = %s\n", $str, $str, $str, $str;

对于 64 位 Perl,这会产生:

27823221234
27823221234 = 27823221234 = 27823221234.000000 = 27823221234
27823221234 = 27823221234 = 27823221234.000000 = 27823221234

如果您真的需要大数字(数百位数字),请查看支持它们的模块。例如:

于 2011-01-24T16:50:21.003 回答