我从各种来源获得一些数字,其浮动长度不同.我正在总结所有数字.这些数字会自动完成.有人请建议防止perl中的自动舍入.
示例代码段如下.
#!/usr/bin/perl
use strict;
my $x=200.1564867256545456457;
my $y=3352.25654454545454;
print "X : $x\n Y : $y\n";
Run Code Online (Sandbox Code Playgroud)
Sin*_*nür 11
你无法改变存在有限数量的浮点数的事实,而有无数的实数.
您始终可以选择无需修改即可将其作为字符串进行读取和打印.但是,当你执行任何算术时,你处于浮点土地.
您有两种选择: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/;
Run Code Online (Sandbox Code Playgroud)
输出:
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/;
Run Code Online (Sandbox Code Playgroud)
输出:
x = 200.156486725654545645700 y = 3352.25654454545454000000