繁体   English   中英

Perl长数据类型

[英]Perl long data type

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

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

print $num;

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

你的选择是:

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

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

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

在你的情况下27823221234实际上表示为double,所以当你尝试输入到sprintf时你得到-1

my $x = 27823221234;

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

print $num, "\n";

屈服于

27823221234.000000

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

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

下面是一些代码,说明了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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM