Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl长数据类型_Perl_Perl Data Structures - Fatal编程技术网

Perl长数据类型

Perl长数据类型,perl,perl-data-structures,Perl,Perl Data Structures,我正在用Perl编写一个应用程序,它需要长数据类型而不是整数。我怎样才能做到这一点。比如, my $num = sprintf('%ld', 27823221234); print $num; 输出不是长的,而是一个整数。在您的例子中,27823221234实际上表示为double,因此当您尝试馈送到sprintf时,您会收到-1 my $x = 27823221234; my $num = sprintf('%lf', $x); print $num, "\n"; 屈服于 27823

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

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

print $num;

输出不是长的,而是一个整数。

在您的例子中,27823221234实际上表示为double,因此当您尝试馈送到sprintf时,您会收到-1

my $x = 27823221234;

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

print $num, "\n";
屈服于

27823221234.000000

如果你想用大整数进行数学运算,请考虑使用Ma::BigIt模块。

你可能很困惑。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
如果您真的需要大数字(数百位数字),请查看支持它们的模块。例如:

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
  • 使用
  • 使用
更新: 啊,你也可以用浮点数代替整数:

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

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

您使用的是32位版本的Perl吗?
sprintf()
的输出是一个字符串。你到底想做什么?我正在运行64位版本。我正在编写需要长类型而不是整数的xmlrpc客户端。远程错误[0]:没有与参数匹配的方法:java.lang.String,@Gruther:您是如何从Perl程序的java.lang.String中获得错误的?您是否选择了正确的语言标记?那么您需要正确使用
RPC::XML
。如果您运行的是64位Perl,那么问题不在于Perl本身,而在于它发送给Java应用程序的内容。这是一个更难回答的问题——尤其是因为它可能涉及许多模块和许多代码行。您还没有演示从Perl代码段获得的输出;您还没有演示希望从Perl代码段获得的输出。对于64位Perl,您应该不会看到与我在答案中显示的内容有任何不同。所以,你需要更清楚地找出问题所在,这样你才能提出一个有答案的问题。