我从不同来源获取一些数字,其浮点数不同。我正在总结所有数字。这些数字会自动完成。有人请建议防止在perl中自动完成。
示例代码段位于下方。
#!/usr/bin/perl
use strict;
my $x=200.1564867256545456457;
my $y=3352.25654454545454;
print "X : $x\n Y : $y\n";
答案 0 :(得分:11)
你不能改变有floating point个数字有限的事实,而实际数字却不计其数。
您始终可以选择无需修改即可将其作为字符串进行读取和打印。但是,当你执行任何算术时,你处于浮点土地。
您有两种选择:1。您可以使用printf/sprintf使用比默认值更多的数字打印数字;或2.您可以尝试使用任意精度算术。后者必然要慢得多,你需要注意如何初始化变量。
#!/usr/bin/env perl
use strict;
use warnings;
my %n = (
x => 200.1564867256545456457,
y => 3352.25654454545454,
);
printf "%s = %.18f\n", $_, $n{$_} for qw/x y/;
输出:
x = 200.156486725654531256 y = 3352.256544545454289619
这表明大多数实数不能用浮点数表示。
#!/usr/bin/env perl
use strict;
use warnings;
use Math::BigFloat;
Math::BigFloat->accuracy(24);
my %n = (
x => Math::BigFloat->new('200.1564867256545456457'),
y => Math::BigFloat->new('3352.25654454545454'),
);
print "$_ = $n{$_}\n" for qw/x y/;
输出:
x = 200.156486725654545645700 y = 3352.25654454545454000000