Perl List::Util是否正在更改我的号码的表示形式?

Perl List::Util是否正在更改我的号码的表示形式?,perl,module,Perl,Module,这是脚本的结尾部分,需要4天的信息, 取前三天的平均值,然后从平均值中减去今天的值 获取差异 第一个例子是正确的。 但是,如果从0.002997575中减去0.00299268,则第二个示例等于-0.000004895。然而,该公司将其列为-4.8949999955E-06 我需要用正则表示法 use List::Util qw/sum/; $todays_latency = $ecp_average[0]; $sum = sum $ecp_average[1] + $ecp_average[2

这是脚本的结尾部分,需要4天的信息, 取前三天的平均值,然后从平均值中减去今天的值 获取差异

第一个例子是正确的。 但是,如果从0.002997575中减去0.00299268,则第二个示例等于-0.000004895。然而,该公司将其列为-4.8949999955E-06

我需要用正则表示法

use List::Util qw/sum/;
$todays_latency = $ecp_average[0];
$sum = sum $ecp_average[1] + $ecp_average[2] + $ecp_average[3]  + $ecp_average[4];

$average = $sum/$#ecp_average;
$variance = $todays_latency - $average ;

print "Todays listing is  $todays_latency\n";
print "The Average is $average\n";
print "Todays Variance from the average is $variance\n";
print "\n";

foreach(@ecp_average){

    print "$_\n";
}

print "\n";
 @ecp_average = ();
}
输出 这是一个四舍五入的数字表示问题

发件人:

有关详细的解释,请参见大卫·戈德伯格的《每台计算机都在做什么》 科学家应该了解浮点运算 http://web.cse.msu.edu/~cse320/Documents/FloatingPoint.pdf

在内部,计算机用二进制表示浮点数。 数字就像两台计算机的能力一样,不能存储所有的数字 确切地一些实数在这个过程中失去了精确性。这是一个 计算机如何存储数字并影响所有计算机的问题 语言,而不仅仅是Perl

显示数字的血淋淋的细节 表示和转换。限制小数位数 在数字中,可以使用or函数

有关详细信息,请参见中的浮点运算

printf "%.2f", 10/3;
my $number = sprintf "%.2f", 10/3;
换句话说,如果这是一个问题,请使用sprintf解决:

顺便说一下

my $sum = sum $ecp_average[1] + $ecp_average[2] +
              $ecp_average[3] + $ecp_average[4];
毫无意义。你只传递了一个数字求和,所以它实际上是一个不可操作的数字。你想要吗

my $sum = $ecp_average[1] + $ecp_average[2] +
          $ecp_average[3] + $ecp_average[4];


[这应该是一条注释,但它作为注释不清晰。请原谅放置。]

您的文本显示平均3天,但您的代码平均4天!您似乎期望@ecp_average包含5个值,但您的输出仅显示3个值!您的问题与List::Util没有任何关系。此外,您的代码有不平衡的括号,以及在使用之前未初始化的变量。发布一个完整的可运行代码示例,否则我们无法真正确定问题所在。是的,目前计划在周五运行,在发布前几天我就做了这项工作。
$variance = sprintf '%.9f', $todays_latency - $average ;  # Rounded to 9 d.p.
my $sum = sum $ecp_average[1] + $ecp_average[2] +
              $ecp_average[3] + $ecp_average[4];
my $sum = $ecp_average[1] + $ecp_average[2] +
          $ecp_average[3] + $ecp_average[4];
my $sum = sum @ecp_average[1..4];