我在Perl脚本中尝试了以下内容:
$b = 19999999999999999 % 10000000000000000;
print "$b\n";
错误地输出0
。
然后我发现an answer说使用bignum
:
use bignum;
$b = 19999999999999999 % 10000000000000000;
print "$b\n";
正确输出9999999999999999
。
但是bignum
只是将所有整数常量转换为Math :: BigInt。所以我尝试了以下内容,这与使用bignum
:
use Math::BigInt;
$b = Math::BigInt->new(19999999999999999) % Math::BigInt->new(10000000000000000);
print "$b\n";
但错误地输出0
。我在使用Math :: BigInt做错了吗?
答案 0 :(得分:7)
您仍然首先使用本机Perl号码,然后将它们转换为Math::BigInt
个对象。试试这个:
my $x = Math::BigInt->new('19999999999999999') % Math::BigInt->new('10000000000000000');
以标量数字给出的输入可能会失去精确度。引用您的输入以确保没有数字丢失:
$x = Math::BigInt->new( 56789012345678901234 ); # bad $x = Math::BigInt->new('56789012345678901234'); # good
(另外,请勿在{{1}}以及类似例程之外使用$b
。)