为什么我不能在Perl的sprintf中插入浮点数的精度?

watbbzwu  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(155)

我应该怎么做?我希望数字的数量是可配置的
我尝试了以下方法:

my $digits = 2;
my $test = 5.42223;
$test = sprintf ("%.$digits\f", $test);
print "$test \n";

但不起作用,它将打印“%.2”我应该得到5.42

yyyllmsg

yyyllmsg1#

通过在格式字符串中插入值来实现这一点,只需将变量名放在大括号中,以描述变量名停止的位置和格式说明符'f'开始的位置:

sprintf ("%.${digits}f", $test)

或者,您可以使用'*'作为格式宽度,使sprintf从下一个参数获取值:

sprintf ("%.*f", $digits, $test);
goucqfw6

goucqfw62#

你几乎猜对了,但有两件事需要考虑:

  1. Perl在猜测变量是什么时,会尽可能地使用最长的名称(标识符)。您的代码看起来就像您知道这一点,Dave gives you the answer for that . use strict可以帮助您做到这一点。
    1.双引号上下文还插入其他内容,例如将序列\n插入到换行符中。序列\f是一个换页符。因此,sprintf不会看到格式说明符,因为f已经从字符串中消失。

相关问题