Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以用Perl中的sprintf为数字指定最大精度宽度吗?_Perl - Fatal编程技术网

我可以用Perl中的sprintf为数字指定最大精度宽度吗?

我可以用Perl中的sprintf为数字指定最大精度宽度吗?,perl,Perl,是否可以使用Perl的sprintf函数为浮点数指定最大精度宽度?在阅读了文档之后,我认为不是,但可能是我忽略了一些东西 因此,如果我有4.12,我希望将数字格式化为4.12 my $abc = 4.12; my $out = sprintf("%?...", $abc); # $out eq '4.12'; 但是,如果数字的精度超过6位数,我只需要6位数: my $def = 1.23456789; my $out = sprintf("%?...", $def); # $out eq '1

是否可以使用Perl的
sprintf
函数为浮点数指定最大精度宽度?在阅读了文档之后,我认为不是,但可能是我忽略了一些东西

因此,如果我有4.12,我希望将数字格式化为
4.12

my $abc = 4.12;
my $out = sprintf("%?...", $abc); # $out eq '4.12';
但是,如果数字的精度超过6位数,我只需要6位数:

my $def = 1.23456789;
my $out = sprintf("%?...", $def); # $out eq '1.234568';
使用
sprintf
,这可能吗

编辑

我在用

sub output_number {
  my $number = shift;

  my $ret = sprintf("%.6f", $number);

  $ret =~ s/0*$//g;
  $ret =~ s/\.$//g;

  return $ret;
}
为了我的目的,这正是我所需要的。但我希望有一种更优雅的方式。最好是单行程序,不一定限于使用
sprintf


另外请注意,建议的
printf(“%.7g”,$number)
的行为方式与我所希望的不同(例如
$n=0.0000000000 1;

我相信您可以使用
%.g

但是,如果指数表示法真的毁了你的一天,而且你安装的perl足够现代,那么总有

sprintf("%.6f",$number) =~ s/\.?0+$//r

mansprintf
可能是一个不错的读物……请注意,大的或小的数字(任意符号)都会显示为
1.1234567e+123
perl-e“printf('.7g',0.000000001);“
导致
1e-009
,我希望这是一个
0
perl-e“printf('.7g',10_);”
结果是
1e+007
,我想要
10000000
sprintf("%.6f",$number) =~ s/\.?0+$//r