我对perl中的十进制数如何工作感到非常困惑。我无法将int与double相乘。这就是我所拥有的:
sub timeEstimate(){
$number = shift;
print "Number: $number\n";
$stuff = sprintf("%d", $number * $number * $number) * .2045;
print "stuff: $stuff\n";
$totalDownloads = $stuff + ($number * $number) + $number;
print "totalDownloads: $totalDownloads\n";
$secondPerFile = .4464;
print "secondPerFile: $secondPerFile\n";
$totalSeconds = ($totalDownloads * $secondPerFile);
print "totalSeconds: $totalSeconds\n";
$totalHours = ($totalSeconds / 3600);
print "totalHours: $totalHours\n";
return $totalHours;
}
但无论我尝试什么,即使是sprintf,我仍然无法获得除了0之外的任何东西。有人可以解释系统是如何工作的吗?
UPDATE-Solved:由于愚蠢的自我造成的错误。我有
use integer;
代码中的。 headdesk
答案 0 :(得分:3)
声明变量并从函数中删除原型后,您的代码似乎可以正常工作:
use warnings;
use strict;
sub timeEstimate {
my $number = shift;
print "Number: $number\n";
my $stuff = sprintf("%d", $number * $number * $number) * .2045;
print "stuff: $stuff\n";
my $totalDownloads = $stuff + ($number * $number) + $number;
print "totalDownloads: $totalDownloads\n";
my $secondPerFile = .4464;
print "secondPerFile: $secondPerFile\n";
my $totalSeconds = ($totalDownloads * $secondPerFile);
print "totalSeconds: $totalSeconds\n";
my $totalHours = ($totalSeconds / 3600);
print "totalHours: $totalHours\n";
return $totalHours;
}
timeEstimate 10;
Number: 10
stuff: 204.5
totalDownloads: 314.5
secondPerFile: 0.4464
totalSeconds: 140.3928
totalHours: 0.038998
在Perl函数中,您总是需要使用my
关键字(它分配一个词法范围的变量)声明您的变量,否则您将遇到问题。在每个程序的顶部使用use warnings; use strict;
将使您免于遗忘,并且还将提供许多有用的诊断消息。
您在()
函数上的timeEstimate
原型出错了。它指定timeEstimate
函数不接受任何参数。在您确切知道为什么需要使用它们之前,请不要使用Perl的函数原型。
最后,您不需要使用sprintf
。该行可以改写为:
my $stuff = 0.2045 * ($number ** 3);
答案 1 :(得分:1)
你的问题在于子程序原型 - 你有一个空的参数列表,但是你用一个参数调用它。
让它时间精确($),你会没事的。然后叫“timeEstimate(10)”或其他什么。
但是我没有看到你如何在没有收到错误信息的情况下运行它。
答案 2 :(得分:0)
perl -e '$var = "0.123"; print sprintf("%02.5f\n", $var);'
0.12300
sprintf可以正常使用十进制数字。
编辑:
看起来你还没有使用“use strict”,这将有助于任何变量名称拼写错误。 我会从函数声明中删除()。
答案 3 :(得分:0)
您问题中的代码存在语义错误。你应该用
开始sub timeEstimate { # no parens!
您是否忘记将参数传递给timeEstimate
?将其称为
timeEstimate 3;
给出以下输出:
Number: 3 stuff: 5.5215 totalDownloads: 17.5215 secondPerFile: 0.4464 totalSeconds: 7.8215976 totalHours: 0.002172666